Migrated several tests from blink to V8 repository.
authormachenbach@chromium.org <machenbach@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 27 Jun 2013 20:02:04 +0000 (20:02 +0000)
committermachenbach@chromium.org <machenbach@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 27 Jun 2013 20:02:04 +0000 (20:02 +0000)
R=jkummerow@chromium.org

Review URL: https://codereview.chromium.org/18068003

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15370 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

762 files changed:
test/webkit/Array-isArray-expected.txt [new file with mode: 0644]
test/webkit/Array-isArray.js [new file with mode: 0644]
test/webkit/JSON-stringify-replacer-expected.txt [new file with mode: 0644]
test/webkit/JSON-stringify-replacer.js [new file with mode: 0644]
test/webkit/Object-create-expected.txt [new file with mode: 0644]
test/webkit/Object-create.js [new file with mode: 0644]
test/webkit/Object-defineProperties-expected.txt [new file with mode: 0644]
test/webkit/Object-defineProperties.js [new file with mode: 0644]
test/webkit/Object-keys-expected.txt [new file with mode: 0644]
test/webkit/Object-keys.js [new file with mode: 0644]
test/webkit/ToNumber-expected.txt [new file with mode: 0644]
test/webkit/ToNumber.js [new file with mode: 0644]
test/webkit/add-recovery-expected.txt [new file with mode: 0644]
test/webkit/add-recovery.js [new file with mode: 0644]
test/webkit/apply-varargs-expected.txt [new file with mode: 0644]
test/webkit/apply-varargs.js [new file with mode: 0644]
test/webkit/arguments-bad-index-expected.txt [new file with mode: 0644]
test/webkit/arguments-bad-index.js [new file with mode: 0644]
test/webkit/array-constructor-host-call-expected.txt [new file with mode: 0644]
test/webkit/array-constructor-host-call.js [new file with mode: 0644]
test/webkit/array-defineOwnProperty-expected.txt [new file with mode: 0644]
test/webkit/array-defineOwnProperty.js [new file with mode: 0644]
test/webkit/array-enumerators-functions-expected.txt [new file with mode: 0644]
test/webkit/array-enumerators-functions.js [new file with mode: 0644]
test/webkit/array-every-expected.txt [new file with mode: 0644]
test/webkit/array-every.js [new file with mode: 0644]
test/webkit/array-filter-expected.txt [new file with mode: 0644]
test/webkit/array-filter.js [new file with mode: 0644]
test/webkit/array-holes-expected.txt [new file with mode: 0644]
test/webkit/array-holes.js [new file with mode: 0644]
test/webkit/array-index-immediate-types-expected.txt [new file with mode: 0644]
test/webkit/array-index-immediate-types.js [new file with mode: 0644]
test/webkit/array-indexing-expected.txt [new file with mode: 0644]
test/webkit/array-indexing.js [new file with mode: 0644]
test/webkit/array-iterate-backwards-expected.txt [new file with mode: 0644]
test/webkit/array-iterate-backwards.js [new file with mode: 0644]
test/webkit/array-lastIndexOf-expected.txt [new file with mode: 0644]
test/webkit/array-lastIndexOf.js [new file with mode: 0644]
test/webkit/array-proto-func-length-getter-except-expected.txt [new file with mode: 0644]
test/webkit/array-proto-func-length-getter-except.js [new file with mode: 0644]
test/webkit/array-proto-func-property-getter-except-expected.txt [new file with mode: 0644]
test/webkit/array-proto-func-property-getter-except.js [new file with mode: 0644]
test/webkit/array-reduce-expected.txt [new file with mode: 0644]
test/webkit/array-reduce.js [new file with mode: 0644]
test/webkit/array-reduceRight-expected.txt [new file with mode: 0644]
test/webkit/array-reduceRight.js [new file with mode: 0644]
test/webkit/array-reset-large-index-expected.txt [new file with mode: 0644]
test/webkit/array-reset-large-index.js [new file with mode: 0644]
test/webkit/array-sort-numericCompare-expected.txt [new file with mode: 0644]
test/webkit/array-sort-numericCompare.js [new file with mode: 0644]
test/webkit/array-sort-reentrance-expected.txt [new file with mode: 0644]
test/webkit/array-sort-reentrance.js [new file with mode: 0644]
test/webkit/array-sort-small-sparse-array-with-large-length-expected.txt [new file with mode: 0644]
test/webkit/array-sort-small-sparse-array-with-large-length.js [new file with mode: 0644]
test/webkit/array-sort-sparse-expected.txt [new file with mode: 0644]
test/webkit/array-sort-sparse.js [new file with mode: 0644]
test/webkit/array-tostring-and-join-expected.txt [new file with mode: 0644]
test/webkit/array-tostring-and-join.js [new file with mode: 0644]
test/webkit/array-type-speculation-expected.txt [new file with mode: 0644]
test/webkit/array-type-speculation.js [new file with mode: 0644]
test/webkit/avl-crash-expected.txt [new file with mode: 0644]
test/webkit/avl-crash.js [new file with mode: 0644]
test/webkit/bitops-type-tag-expected.txt [new file with mode: 0644]
test/webkit/bitops-type-tag.js [new file with mode: 0644]
test/webkit/boolean-argument-prediction-expected.txt [new file with mode: 0644]
test/webkit/boolean-argument-prediction.js [new file with mode: 0644]
test/webkit/boxed-double-to-int-expected.txt [new file with mode: 0644]
test/webkit/boxed-double-to-int.js [new file with mode: 0644]
test/webkit/break-ASI-expected.txt [new file with mode: 0644]
test/webkit/break-ASI.js [new file with mode: 0644]
test/webkit/cached-call-uninitialized-arguments-expected.txt [new file with mode: 0644]
test/webkit/cached-call-uninitialized-arguments.js [new file with mode: 0644]
test/webkit/call-apply-crash-expected.txt [new file with mode: 0644]
test/webkit/call-apply-crash.js [new file with mode: 0644]
test/webkit/char-at-expected.txt [new file with mode: 0644]
test/webkit/char-at.js [new file with mode: 0644]
test/webkit/closure-inside-extra-arg-call-expected.txt [new file with mode: 0644]
test/webkit/closure-inside-extra-arg-call.js [new file with mode: 0644]
test/webkit/codegen-assign-nontemporary-as-rexp-expected.txt [new file with mode: 0644]
test/webkit/codegen-assign-nontemporary-as-rexp.js [new file with mode: 0644]
test/webkit/codegen-jless-expected.txt [new file with mode: 0644]
test/webkit/codegen-jless.js [new file with mode: 0644]
test/webkit/codegen-loops-logical-nodes-expected.txt [new file with mode: 0644]
test/webkit/codegen-loops-logical-nodes.js [new file with mode: 0644]
test/webkit/codegen-peephole-locals-expected.txt [new file with mode: 0644]
test/webkit/codegen-peephole-locals.js [new file with mode: 0644]
test/webkit/codegen-temporaries-expected.txt [new file with mode: 0644]
test/webkit/codegen-temporaries.js [new file with mode: 0644]
test/webkit/comparison-operators-expected.txt [new file with mode: 0644]
test/webkit/comparison-operators-greater-expected.txt [new file with mode: 0644]
test/webkit/comparison-operators-greater.js [new file with mode: 0644]
test/webkit/comparison-operators-less-expected.txt [new file with mode: 0644]
test/webkit/comparison-operators-less.js [new file with mode: 0644]
test/webkit/comparison-operators.js [new file with mode: 0644]
test/webkit/const-without-initializer-expected.txt [new file with mode: 0644]
test/webkit/const-without-initializer.js [new file with mode: 0644]
test/webkit/constant-count-expected.txt [new file with mode: 0644]
test/webkit/constant-count.js [new file with mode: 0644]
test/webkit/constant-encoding-expected.txt [new file with mode: 0644]
test/webkit/constant-encoding.js [new file with mode: 0644]
test/webkit/constant-folding-expected.txt [new file with mode: 0644]
test/webkit/constant-folding.js [new file with mode: 0644]
test/webkit/continue-break-multiple-labels-expected.txt [new file with mode: 0644]
test/webkit/continue-break-multiple-labels.js [new file with mode: 0644]
test/webkit/convert-nan-to-bool-expected.txt [new file with mode: 0644]
test/webkit/convert-nan-to-bool.js [new file with mode: 0644]
test/webkit/cyclic-prototypes-expected.txt [new file with mode: 0644]
test/webkit/cyclic-prototypes.js [new file with mode: 0644]
test/webkit/date-DST-pre-1970-expected.txt [new file with mode: 0644]
test/webkit/date-DST-pre-1970.js [new file with mode: 0644]
test/webkit/date-constructor-expected.txt [new file with mode: 0644]
test/webkit/date-constructor.js [new file with mode: 0644]
test/webkit/date-daysfrom1970-overflow-expected.txt [new file with mode: 0644]
test/webkit/date-daysfrom1970-overflow.js [new file with mode: 0644]
test/webkit/date-parse-comments-test-expected.txt [new file with mode: 0644]
test/webkit/date-parse-comments-test.js [new file with mode: 0644]
test/webkit/date-set-to-nan-expected.txt [new file with mode: 0644]
test/webkit/date-set-to-nan.js [new file with mode: 0644]
test/webkit/date-utc-timeclip-expected.txt [new file with mode: 0644]
test/webkit/date-utc-timeclip.js [new file with mode: 0644]
test/webkit/debugger-expected.txt [new file with mode: 0644]
test/webkit/debugger.js [new file with mode: 0644]
test/webkit/declaration-in-block-expected.txt [new file with mode: 0644]
test/webkit/declaration-in-block.js [new file with mode: 0644]
test/webkit/delete-getters-setters-expected.txt [new file with mode: 0644]
test/webkit/delete-getters-setters.js [new file with mode: 0644]
test/webkit/delete-then-put-expected.txt [new file with mode: 0644]
test/webkit/delete-then-put.js [new file with mode: 0644]
test/webkit/dfg-abs-backwards-propagation-expected.txt [new file with mode: 0644]
test/webkit/dfg-abs-backwards-propagation.js [new file with mode: 0644]
test/webkit/dfg-add-not-number-expected.txt [new file with mode: 0644]
test/webkit/dfg-add-not-number.js [new file with mode: 0644]
test/webkit/dfg-arguments-alias-escape-expected.txt [new file with mode: 0644]
test/webkit/dfg-arguments-alias-escape.js [new file with mode: 0644]
test/webkit/dfg-arguments-alias-expected.txt [new file with mode: 0644]
test/webkit/dfg-arguments-alias-one-block-expected.txt [new file with mode: 0644]
test/webkit/dfg-arguments-alias-one-block-osr-exit-expected.txt [new file with mode: 0644]
test/webkit/dfg-arguments-alias-one-block-osr-exit.js [new file with mode: 0644]
test/webkit/dfg-arguments-alias-one-block-overwrite-arguments-expected.txt [new file with mode: 0644]
test/webkit/dfg-arguments-alias-one-block-overwrite-arguments.js [new file with mode: 0644]
test/webkit/dfg-arguments-alias-one-block-overwrite-expected.txt [new file with mode: 0644]
test/webkit/dfg-arguments-alias-one-block-overwrite.js [new file with mode: 0644]
test/webkit/dfg-arguments-alias-one-block.js [new file with mode: 0644]
test/webkit/dfg-arguments-alias.js [new file with mode: 0644]
test/webkit/dfg-arguments-cross-code-origin-expected.txt [new file with mode: 0644]
test/webkit/dfg-arguments-cross-code-origin.js [new file with mode: 0644]
test/webkit/dfg-arguments-mixed-alias-expected.txt [new file with mode: 0644]
test/webkit/dfg-arguments-mixed-alias.js [new file with mode: 0644]
test/webkit/dfg-arguments-osr-exit-expected.txt [new file with mode: 0644]
test/webkit/dfg-arguments-osr-exit-multiple-blocks-before-exit-expected.txt [new file with mode: 0644]
test/webkit/dfg-arguments-osr-exit-multiple-blocks-before-exit.js [new file with mode: 0644]
test/webkit/dfg-arguments-osr-exit-multiple-blocks-expected.txt [new file with mode: 0644]
test/webkit/dfg-arguments-osr-exit-multiple-blocks.js [new file with mode: 0644]
test/webkit/dfg-arguments-osr-exit.js [new file with mode: 0644]
test/webkit/dfg-arguments-out-of-bounds-expected.txt [new file with mode: 0644]
test/webkit/dfg-arguments-out-of-bounds.js [new file with mode: 0644]
test/webkit/dfg-arguments-unexpected-escape-expected.txt [new file with mode: 0644]
test/webkit/dfg-arguments-unexpected-escape.js [new file with mode: 0644]
test/webkit/dfg-arith-add-overflow-check-elimination-predicted-but-not-proven-int-expected.txt [new file with mode: 0644]
test/webkit/dfg-arith-add-overflow-check-elimination-predicted-but-not-proven-int.js [new file with mode: 0644]
test/webkit/dfg-arith-add-overflow-check-elimination-tower-of-large-numbers-expected.txt [new file with mode: 0644]
test/webkit/dfg-arith-add-overflow-check-elimination-tower-of-large-numbers.js [new file with mode: 0644]
test/webkit/dfg-array-dead-expected.txt [new file with mode: 0644]
test/webkit/dfg-array-dead.js [new file with mode: 0644]
test/webkit/dfg-array-length-dead-expected.txt [new file with mode: 0644]
test/webkit/dfg-array-length-dead.js [new file with mode: 0644]
test/webkit/dfg-array-pop-side-effects-expected.txt [new file with mode: 0644]
test/webkit/dfg-array-pop-side-effects.js [new file with mode: 0644]
test/webkit/dfg-array-pop-value-clearing-expected.txt [new file with mode: 0644]
test/webkit/dfg-array-pop-value-clearing.js [new file with mode: 0644]
test/webkit/dfg-arrayify-elimination-expected.txt [new file with mode: 0644]
test/webkit/dfg-arrayify-elimination.js [new file with mode: 0644]
test/webkit/dfg-arrayify-when-late-prevent-extensions-expected.txt [new file with mode: 0644]
test/webkit/dfg-arrayify-when-late-prevent-extensions.js [new file with mode: 0644]
test/webkit/dfg-arrayify-when-prevent-extensions-expected.txt [new file with mode: 0644]
test/webkit/dfg-arrayify-when-prevent-extensions.js [new file with mode: 0644]
test/webkit/dfg-bool-to-int32-reuse-expected.txt [new file with mode: 0644]
test/webkit/dfg-bool-to-int32-reuse.js [new file with mode: 0644]
test/webkit/dfg-branch-logical-not-peephole-around-osr-exit-expected.txt [new file with mode: 0644]
test/webkit/dfg-branch-logical-not-peephole-around-osr-exit.js [new file with mode: 0644]
test/webkit/dfg-branch-not-fail-expected.txt [new file with mode: 0644]
test/webkit/dfg-branch-not-fail.js [new file with mode: 0644]
test/webkit/dfg-call-function-hit-watchpoint-expected.txt [new file with mode: 0644]
test/webkit/dfg-call-function-hit-watchpoint.js [new file with mode: 0644]
test/webkit/dfg-call-method-hit-watchpoint-expected.txt [new file with mode: 0644]
test/webkit/dfg-call-method-hit-watchpoint.js [new file with mode: 0644]
test/webkit/dfg-captured-var-get-local-expected.txt [new file with mode: 0644]
test/webkit/dfg-captured-var-get-local.js [new file with mode: 0644]
test/webkit/dfg-cfa-merge-with-dead-use-at-tail-expected.txt [new file with mode: 0644]
test/webkit/dfg-cfa-merge-with-dead-use-at-tail.js [new file with mode: 0644]
test/webkit/dfg-cfa-prove-put-by-id-simple-when-storing-to-specialized-function-expected.txt [new file with mode: 0644]
test/webkit/dfg-cfa-prove-put-by-id-simple-when-storing-to-specialized-function.js [new file with mode: 0644]
test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-and-decrement-expected.txt [new file with mode: 0644]
test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-and-decrement.js [new file with mode: 0644]
test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-expected.txt [new file with mode: 0644]
test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null.js [new file with mode: 0644]
test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-typeof-expected.txt [new file with mode: 0644]
test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-typeof.js [new file with mode: 0644]
test/webkit/dfg-cfg-simplify-phantom-get-local-on-same-block-set-local-expected.txt [new file with mode: 0644]
test/webkit/dfg-cfg-simplify-phantom-get-local-on-same-block-set-local.js [new file with mode: 0644]
test/webkit/dfg-cfg-simplify-redundant-dead-get-local-expected.txt [new file with mode: 0644]
test/webkit/dfg-cfg-simplify-redundant-dead-get-local.js [new file with mode: 0644]
test/webkit/dfg-check-structure-elimination-for-non-cell-expected.txt [new file with mode: 0644]
test/webkit/dfg-check-structure-elimination-for-non-cell.js [new file with mode: 0644]
test/webkit/dfg-check-two-structures-expected.txt [new file with mode: 0644]
test/webkit/dfg-check-two-structures.js [new file with mode: 0644]
test/webkit/dfg-compare-final-object-to-final-object-or-other-when-both-proven-final-object-expected.txt [new file with mode: 0644]
test/webkit/dfg-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js [new file with mode: 0644]
test/webkit/dfg-compare-final-object-to-final-object-or-other-when-proven-final-object-expected.txt [new file with mode: 0644]
test/webkit/dfg-compare-final-object-to-final-object-or-other-when-proven-final-object.js [new file with mode: 0644]
test/webkit/dfg-constant-fold-first-local-read-after-block-merge-expected.txt [new file with mode: 0644]
test/webkit/dfg-constant-fold-first-local-read-after-block-merge.js [new file with mode: 0644]
test/webkit/dfg-constant-fold-logical-not-branch-expected.txt [new file with mode: 0644]
test/webkit/dfg-constant-fold-logical-not-branch.js [new file with mode: 0644]
test/webkit/dfg-constant-fold-misprediction-expected.txt [new file with mode: 0644]
test/webkit/dfg-constant-fold-misprediction.js [new file with mode: 0644]
test/webkit/dfg-constant-fold-uncaptured-variable-that-is-later-captured-expected.txt [new file with mode: 0644]
test/webkit/dfg-constant-fold-uncaptured-variable-that-is-later-captured.js [new file with mode: 0644]
test/webkit/dfg-convert-this-dom-window-expected.txt [new file with mode: 0644]
test/webkit/dfg-convert-this-dom-window.js [new file with mode: 0644]
test/webkit/dfg-convert-this-object-then-exit-on-other-expected.txt [new file with mode: 0644]
test/webkit/dfg-convert-this-object-then-exit-on-other.js [new file with mode: 0644]
test/webkit/dfg-convert-this-other-then-exit-on-object-expected.txt [new file with mode: 0644]
test/webkit/dfg-convert-this-other-then-exit-on-object.js [new file with mode: 0644]
test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-other-expected.txt [new file with mode: 0644]
test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-other.js [new file with mode: 0644]
test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-string-expected.txt [new file with mode: 0644]
test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-string.js [new file with mode: 0644]
test/webkit/dfg-create-inlined-arguments-in-closure-inline-expected.txt [new file with mode: 0644]
test/webkit/dfg-create-inlined-arguments-in-closure-inline.js [new file with mode: 0644]
test/webkit/dfg-cse-cfa-discrepancy-expected.txt [new file with mode: 0644]
test/webkit/dfg-cse-cfa-discrepancy.js [new file with mode: 0644]
test/webkit/dfg-cse-dead-get-scoped-var-expected.txt [new file with mode: 0644]
test/webkit/dfg-cse-dead-get-scoped-var.js [new file with mode: 0644]
test/webkit/dfg-dead-min-one-arg-expected.txt [new file with mode: 0644]
test/webkit/dfg-dead-min-one-arg.js [new file with mode: 0644]
test/webkit/dfg-dead-min-two-args-expected.txt [new file with mode: 0644]
test/webkit/dfg-dead-min-two-args.js [new file with mode: 0644]
test/webkit/dfg-dead-redundant-get-array-length-expected.txt [new file with mode: 0644]
test/webkit/dfg-dead-redundant-get-array-length.js [new file with mode: 0644]
test/webkit/dfg-dead-speculation-expected.txt [new file with mode: 0644]
test/webkit/dfg-dead-speculation.js [new file with mode: 0644]
test/webkit/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes-expected.txt [new file with mode: 0644]
test/webkit/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes.js [new file with mode: 0644]
test/webkit/dfg-dead-variable-on-exit-expected.txt [new file with mode: 0644]
test/webkit/dfg-dead-variable-on-exit.js [new file with mode: 0644]
test/webkit/dfg-double-addition-simplify-to-int-expected.txt [new file with mode: 0644]
test/webkit/dfg-double-addition-simplify-to-int.js [new file with mode: 0644]
test/webkit/dfg-double-use-of-post-simplification-double-prediction-expected.txt [new file with mode: 0644]
test/webkit/dfg-double-use-of-post-simplification-double-prediction.js [new file with mode: 0644]
test/webkit/dfg-double-vote-fuzz-expected.txt [new file with mode: 0644]
test/webkit/dfg-double-vote-fuzz.js [new file with mode: 0644]
test/webkit/dfg-ensure-array-storage-on-string-expected.txt [new file with mode: 0644]
test/webkit/dfg-ensure-array-storage-on-string.js [new file with mode: 0644]
test/webkit/dfg-ensure-array-storage-on-window-expected.txt [new file with mode: 0644]
test/webkit/dfg-ensure-array-storage-on-window.js [new file with mode: 0644]
test/webkit/dfg-ensure-contiguous-on-string-expected.txt [new file with mode: 0644]
test/webkit/dfg-ensure-contiguous-on-string.js [new file with mode: 0644]
test/webkit/dfg-ensure-non-array-array-storage-on-window-expected.txt [new file with mode: 0644]
test/webkit/dfg-ensure-non-array-array-storage-on-window.js [new file with mode: 0644]
test/webkit/dfg-exception-expected.txt [new file with mode: 0644]
test/webkit/dfg-exception.js [new file with mode: 0644]
test/webkit/dfg-float32-array-nan-expected.txt [new file with mode: 0644]
test/webkit/dfg-float32-array-nan.js [new file with mode: 0644]
test/webkit/dfg-flush-get-local-expected.txt [new file with mode: 0644]
test/webkit/dfg-flush-get-local.js [new file with mode: 0644]
test/webkit/dfg-force-exit-then-sparse-conditional-constant-prop-in-loop-expected.txt [new file with mode: 0644]
test/webkit/dfg-force-exit-then-sparse-conditional-constant-prop-in-loop.js [new file with mode: 0644]
test/webkit/dfg-get-by-val-clobber-expected.txt [new file with mode: 0644]
test/webkit/dfg-get-by-val-clobber.js [new file with mode: 0644]
test/webkit/dfg-getter-expected.txt [new file with mode: 0644]
test/webkit/dfg-getter-throw-expected.txt [new file with mode: 0644]
test/webkit/dfg-getter-throw.js [new file with mode: 0644]
test/webkit/dfg-getter.js [new file with mode: 0644]
test/webkit/dfg-holy-put-by-val-interferes-with-get-array-length-expected.txt [new file with mode: 0644]
test/webkit/dfg-holy-put-by-val-interferes-with-get-array-length.js [new file with mode: 0644]
test/webkit/dfg-inline-arguments-become-double-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-arguments-become-double.js [new file with mode: 0644]
test/webkit/dfg-inline-arguments-become-int32-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-arguments-become-int32.js [new file with mode: 0644]
test/webkit/dfg-inline-arguments-int32-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-arguments-int32.js [new file with mode: 0644]
test/webkit/dfg-inline-arguments-osr-exit-and-capture-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-arguments-osr-exit-and-capture.js [new file with mode: 0644]
test/webkit/dfg-inline-arguments-out-of-bounds-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-arguments-out-of-bounds.js [new file with mode: 0644]
test/webkit/dfg-inline-arguments-reset-changetype-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-arguments-reset-changetype.js [new file with mode: 0644]
test/webkit/dfg-inline-arguments-reset-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-arguments-reset.js [new file with mode: 0644]
test/webkit/dfg-inline-arguments-simple-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-arguments-simple.js [new file with mode: 0644]
test/webkit/dfg-inline-arguments-use-directly-from-inlined-code-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-arguments-use-directly-from-inlined-code.js [new file with mode: 0644]
test/webkit/dfg-inline-arguments-use-from-all-the-places-broken-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-arguments-use-from-all-the-places-broken.js [new file with mode: 0644]
test/webkit/dfg-inline-arguments-use-from-all-the-places-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-arguments-use-from-all-the-places.js [new file with mode: 0644]
test/webkit/dfg-inline-arguments-use-from-getter-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-arguments-use-from-getter.js [new file with mode: 0644]
test/webkit/dfg-inline-arguments-use-from-uninlined-code-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-arguments-use-from-uninlined-code.js [new file with mode: 0644]
test/webkit/dfg-inline-constant-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-constant.js [new file with mode: 0644]
test/webkit/dfg-inline-constructor-that-uses-arguments-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-constructor-that-uses-arguments.js [new file with mode: 0644]
test/webkit/dfg-inline-early-return-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-early-return.js [new file with mode: 0644]
test/webkit/dfg-inline-function-dot-caller-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-function-dot-caller.js [new file with mode: 0644]
test/webkit/dfg-inline-new-array-buffer-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-new-array-buffer.js [new file with mode: 0644]
test/webkit/dfg-inline-unused-this-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-unused-this-method-check-expected.txt [new file with mode: 0644]
test/webkit/dfg-inline-unused-this-method-check.js [new file with mode: 0644]
test/webkit/dfg-inline-unused-this.js [new file with mode: 0644]
test/webkit/dfg-int-overflow-in-loop-expected.txt [new file with mode: 0644]
test/webkit/dfg-int-overflow-in-loop.js [new file with mode: 0644]
test/webkit/dfg-int-overflow-large-constants-in-a-line-expected.txt [new file with mode: 0644]
test/webkit/dfg-int-overflow-large-constants-in-a-line.js [new file with mode: 0644]
test/webkit/dfg-int32-to-double-on-known-number-expected.txt [new file with mode: 0644]
test/webkit/dfg-int32-to-double-on-known-number.js [new file with mode: 0644]
test/webkit/dfg-int32-to-double-on-set-local-and-exit-expected.txt [new file with mode: 0644]
test/webkit/dfg-int32-to-double-on-set-local-and-exit.js [new file with mode: 0644]
test/webkit/dfg-int32-to-double-on-set-local-and-sometimes-exit-expected.txt [new file with mode: 0644]
test/webkit/dfg-int32-to-double-on-set-local-and-sometimes-exit.js [new file with mode: 0644]
test/webkit/dfg-integer-optimization-expected.txt [new file with mode: 0644]
test/webkit/dfg-integer-optimization.js [new file with mode: 0644]
test/webkit/dfg-intrinsic-osr-exit-expected.txt [new file with mode: 0644]
test/webkit/dfg-intrinsic-osr-exit.js [new file with mode: 0644]
test/webkit/dfg-intrinsic-side-effect-assignment-osr-exit-expected.txt [new file with mode: 0644]
test/webkit/dfg-intrinsic-side-effect-assignment-osr-exit.js [new file with mode: 0644]
test/webkit/dfg-intrinsic-unused-this-expected.txt [new file with mode: 0644]
test/webkit/dfg-intrinsic-unused-this-method-check-expected.txt [new file with mode: 0644]
test/webkit/dfg-intrinsic-unused-this-method-check.js [new file with mode: 0644]
test/webkit/dfg-intrinsic-unused-this.js [new file with mode: 0644]
test/webkit/dfg-max-backwards-propagation-expected.txt [new file with mode: 0644]
test/webkit/dfg-max-backwards-propagation.js [new file with mode: 0644]
test/webkit/dfg-min-backwards-propagation-expected.txt [new file with mode: 0644]
test/webkit/dfg-min-backwards-propagation.js [new file with mode: 0644]
test/webkit/dfg-min-max-expected.txt [new file with mode: 0644]
test/webkit/dfg-min-max.js [new file with mode: 0644]
test/webkit/dfg-mispredict-variable-but-prove-int-expected.txt [new file with mode: 0644]
test/webkit/dfg-mispredict-variable-but-prove-int.js [new file with mode: 0644]
test/webkit/dfg-mul-big-integer-with-small-integer-and-bitor-expected.txt [new file with mode: 0644]
test/webkit/dfg-mul-big-integer-with-small-integer-and-bitor.js [new file with mode: 0644]
test/webkit/dfg-mul-big-integer-with-small-integer-and-detect-overflow-expected.txt [new file with mode: 0644]
test/webkit/dfg-mul-big-integer-with-small-integer-and-detect-overflow.js [new file with mode: 0644]
test/webkit/dfg-mul-big-integer-with-small-integer-expected.txt [new file with mode: 0644]
test/webkit/dfg-mul-big-integer-with-small-integer.js [new file with mode: 0644]
test/webkit/dfg-mul-big-integers-expected.txt [new file with mode: 0644]
test/webkit/dfg-mul-big-integers.js [new file with mode: 0644]
test/webkit/dfg-multi-basic-block-structure-clobber-expected.txt [new file with mode: 0644]
test/webkit/dfg-multi-basic-block-structure-clobber.js [new file with mode: 0644]
test/webkit/dfg-multiply-expected.txt [new file with mode: 0644]
test/webkit/dfg-multiply.js [new file with mode: 0644]
test/webkit/dfg-negative-array-index-expected.txt [new file with mode: 0644]
test/webkit/dfg-negative-array-index.js [new file with mode: 0644]
test/webkit/dfg-obvious-constant-cfa-expected.txt [new file with mode: 0644]
test/webkit/dfg-obvious-constant-cfa.js [new file with mode: 0644]
test/webkit/dfg-other-branch-expected.txt [new file with mode: 0644]
test/webkit/dfg-other-branch.js [new file with mode: 0644]
test/webkit/dfg-patchable-get-by-id-after-watchpoint-expected.txt [new file with mode: 0644]
test/webkit/dfg-patchable-get-by-id-after-watchpoint.js [new file with mode: 0644]
test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object-expected.txt [new file with mode: 0644]
test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js [new file with mode: 0644]
test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object-expected.txt [new file with mode: 0644]
test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object.js [new file with mode: 0644]
test/webkit/dfg-phantom-base-expected.txt [new file with mode: 0644]
test/webkit/dfg-phantom-base.js [new file with mode: 0644]
test/webkit/dfg-phantom-get-local-expected.txt [new file with mode: 0644]
test/webkit/dfg-phantom-get-local.js [new file with mode: 0644]
test/webkit/dfg-post-inc-then-exit-expected.txt [new file with mode: 0644]
test/webkit/dfg-post-inc-then-exit.js [new file with mode: 0644]
test/webkit/dfg-proto-access-inline-osr-exit-expected.txt [new file with mode: 0644]
test/webkit/dfg-proto-access-inline-osr-exit.js [new file with mode: 0644]
test/webkit/dfg-proto-stub-watchpoint-fire-expected.txt [new file with mode: 0644]
test/webkit/dfg-proto-stub-watchpoint-fire.js [new file with mode: 0644]
test/webkit/dfg-proven-sqrt-backwards-propagation-expected.txt [new file with mode: 0644]
test/webkit/dfg-proven-sqrt-backwards-propagation.js [new file with mode: 0644]
test/webkit/dfg-put-by-id-allocate-storage-expected.txt [new file with mode: 0644]
test/webkit/dfg-put-by-id-allocate-storage-polymorphic-expected.txt [new file with mode: 0644]
test/webkit/dfg-put-by-id-allocate-storage-polymorphic.js [new file with mode: 0644]
test/webkit/dfg-put-by-id-allocate-storage.js [new file with mode: 0644]
test/webkit/dfg-put-by-id-prototype-check-expected.txt [new file with mode: 0644]
test/webkit/dfg-put-by-id-prototype-check.js [new file with mode: 0644]
test/webkit/dfg-put-by-id-reallocate-storage-expected.txt [new file with mode: 0644]
test/webkit/dfg-put-by-id-reallocate-storage-polymorphic-expected.txt [new file with mode: 0644]
test/webkit/dfg-put-by-id-reallocate-storage-polymorphic.js [new file with mode: 0644]
test/webkit/dfg-put-by-id-reallocate-storage.js [new file with mode: 0644]
test/webkit/dfg-put-by-val-setter-then-get-by-val-expected.txt [new file with mode: 0644]
test/webkit/dfg-put-by-val-setter-then-get-by-val.js [new file with mode: 0644]
test/webkit/dfg-put-scoped-var-backward-flow-expected.txt [new file with mode: 0644]
test/webkit/dfg-put-scoped-var-backward-flow.js [new file with mode: 0644]
test/webkit/dfg-putbyval-cfa-clobber-expected.txt [new file with mode: 0644]
test/webkit/dfg-putbyval-cfa-clobber.js [new file with mode: 0644]
test/webkit/dfg-redundant-load-of-captured-variable-proven-constant-expected.txt [new file with mode: 0644]
test/webkit/dfg-redundant-load-of-captured-variable-proven-constant.js [new file with mode: 0644]
test/webkit/dfg-resolve-global-polymorphic-non-dictionary-expected.txt [new file with mode: 0644]
test/webkit/dfg-resolve-global-polymorphic-non-dictionary.js [new file with mode: 0644]
test/webkit/dfg-resolve-global-specific-dictionary-expected.txt [new file with mode: 0644]
test/webkit/dfg-resolve-global-specific-dictionary.js [new file with mode: 0644]
test/webkit/dfg-rshift-by-zero-eliminate-valuetoint32-expected.txt [new file with mode: 0644]
test/webkit/dfg-rshift-by-zero-eliminate-valuetoint32.js [new file with mode: 0644]
test/webkit/dfg-side-effect-assignment-osr-exit-expected.txt [new file with mode: 0644]
test/webkit/dfg-side-effect-assignment-osr-exit.js [new file with mode: 0644]
test/webkit/dfg-sqrt-backwards-propagation-expected.txt [new file with mode: 0644]
test/webkit/dfg-sqrt-backwards-propagation.js [new file with mode: 0644]
test/webkit/dfg-store-unexpected-value-into-argument-and-osr-exit-expected.txt [new file with mode: 0644]
test/webkit/dfg-store-unexpected-value-into-argument-and-osr-exit.js [new file with mode: 0644]
test/webkit/dfg-string-stricteq-expected.txt [new file with mode: 0644]
test/webkit/dfg-string-stricteq.js [new file with mode: 0644]
test/webkit/dfg-tear-off-arguments-not-activation-expected.txt [new file with mode: 0644]
test/webkit/dfg-tear-off-arguments-not-activation.js [new file with mode: 0644]
test/webkit/dfg-tear-off-function-dot-arguments-expected.txt [new file with mode: 0644]
test/webkit/dfg-tear-off-function-dot-arguments.js [new file with mode: 0644]
test/webkit/dfg-to-string-bad-toString-expected.txt [new file with mode: 0644]
test/webkit/dfg-to-string-bad-toString.js [new file with mode: 0644]
test/webkit/dfg-to-string-bad-valueOf-expected.txt [new file with mode: 0644]
test/webkit/dfg-to-string-bad-valueOf.js [new file with mode: 0644]
test/webkit/dfg-to-string-int-expected.txt [new file with mode: 0644]
test/webkit/dfg-to-string-int-or-string-expected.txt [new file with mode: 0644]
test/webkit/dfg-to-string-int-or-string.js [new file with mode: 0644]
test/webkit/dfg-to-string-int.js [new file with mode: 0644]
test/webkit/dfg-to-string-on-cell-expected.txt [new file with mode: 0644]
test/webkit/dfg-to-string-on-cell.js [new file with mode: 0644]
test/webkit/dfg-to-string-on-value-expected.txt [new file with mode: 0644]
test/webkit/dfg-to-string-on-value.js [new file with mode: 0644]
test/webkit/dfg-to-string-side-effect-clobbers-toString-expected.txt [new file with mode: 0644]
test/webkit/dfg-to-string-side-effect-clobbers-toString.js [new file with mode: 0644]
test/webkit/dfg-to-string-side-effect-expected.txt [new file with mode: 0644]
test/webkit/dfg-to-string-side-effect.js [new file with mode: 0644]
test/webkit/dfg-to-string-toString-becomes-bad-expected.txt [new file with mode: 0644]
test/webkit/dfg-to-string-toString-becomes-bad-with-check-structure-expected.txt [new file with mode: 0644]
test/webkit/dfg-to-string-toString-becomes-bad-with-check-structure.js [new file with mode: 0644]
test/webkit/dfg-to-string-toString-becomes-bad-with-dictionary-string-prototype-expected.txt [new file with mode: 0644]
test/webkit/dfg-to-string-toString-becomes-bad-with-dictionary-string-prototype.js [new file with mode: 0644]
test/webkit/dfg-to-string-toString-becomes-bad.js [new file with mode: 0644]
test/webkit/dfg-to-string-toString-in-string-expected.txt [new file with mode: 0644]
test/webkit/dfg-to-string-toString-in-string.js [new file with mode: 0644]
test/webkit/dfg-to-string-valueOf-in-string-expected.txt [new file with mode: 0644]
test/webkit/dfg-to-string-valueOf-in-string.js [new file with mode: 0644]
test/webkit/dfg-uint32-to-number-expected.txt [new file with mode: 0644]
test/webkit/dfg-uint32-to-number-in-middle-of-copy-propagation-expected.txt [new file with mode: 0644]
test/webkit/dfg-uint32-to-number-in-middle-of-copy-propagation.js [new file with mode: 0644]
test/webkit/dfg-uint32-to-number-on-captured-variable-expected.txt [new file with mode: 0644]
test/webkit/dfg-uint32-to-number-on-captured-variable.js [new file with mode: 0644]
test/webkit/dfg-uint32-to-number-skip-then-exit-expected.txt [new file with mode: 0644]
test/webkit/dfg-uint32-to-number-skip-then-exit.js [new file with mode: 0644]
test/webkit/dfg-uint32-to-number.js [new file with mode: 0644]
test/webkit/dfg-uint32array-overflow-constant-expected.txt [new file with mode: 0644]
test/webkit/dfg-uint32array-overflow-constant.js [new file with mode: 0644]
test/webkit/dfg-uint8clampedarray-out-of-bounds-put-by-val-alias-expected.txt [new file with mode: 0644]
test/webkit/dfg-uint8clampedarray-out-of-bounds-put-by-val-alias.js [new file with mode: 0644]
test/webkit/dfg-value-to-int32-with-side-effect-expected.txt [new file with mode: 0644]
test/webkit/dfg-value-to-int32-with-side-effect.js [new file with mode: 0644]
test/webkit/dfg-weak-js-constant-silent-fill-expected.txt [new file with mode: 0644]
test/webkit/dfg-weak-js-constant-silent-fill.js [new file with mode: 0644]
test/webkit/dictionary-no-cache-expected.txt [new file with mode: 0644]
test/webkit/dictionary-no-cache.js [new file with mode: 0644]
test/webkit/dictionary-prototype-caching-expected.txt [new file with mode: 0644]
test/webkit/dictionary-prototype-caching.js [new file with mode: 0644]
test/webkit/do-while-semicolon-expected.txt [new file with mode: 0644]
test/webkit/do-while-semicolon.js [new file with mode: 0644]
test/webkit/duplicate-param-crash-expected.txt [new file with mode: 0644]
test/webkit/duplicate-param-crash.js [new file with mode: 0644]
test/webkit/duplicate-param-gc-crash-expected.txt [new file with mode: 0644]
test/webkit/duplicate-param-gc-crash.js [new file with mode: 0644]
test/webkit/enter-dictionary-indexing-mode-with-blank-indexing-type-expected.txt [new file with mode: 0644]
test/webkit/enter-dictionary-indexing-mode-with-blank-indexing-type.js [new file with mode: 0644]
test/webkit/equality-expected.txt [new file with mode: 0644]
test/webkit/equality.js [new file with mode: 0644]
test/webkit/eval-and-with-expected.txt [new file with mode: 0644]
test/webkit/eval-and-with.js [new file with mode: 0644]
test/webkit/eval-cache-crash-expected.txt [new file with mode: 0644]
test/webkit/eval-cache-crash.js [new file with mode: 0644]
test/webkit/eval-throw-return-expected.txt [new file with mode: 0644]
test/webkit/eval-throw-return.js [new file with mode: 0644]
test/webkit/eval-var-decl-expected.txt [new file with mode: 0644]
test/webkit/eval-var-decl.js [new file with mode: 0644]
test/webkit/exception-for-nonobject-expected.txt [new file with mode: 0644]
test/webkit/exception-for-nonobject.js [new file with mode: 0644]
test/webkit/exception-propagate-from-dfg-to-llint-expected.txt [new file with mode: 0644]
test/webkit/exception-propagate-from-dfg-to-llint.js [new file with mode: 0644]
test/webkit/exception-try-finally-scope-error-expected.txt [new file with mode: 0644]
test/webkit/exception-try-finally-scope-error.js [new file with mode: 0644]
test/webkit/exception-with-handler-inside-eval-with-dynamic-scope-expected.txt [new file with mode: 0644]
test/webkit/exception-with-handler-inside-eval-with-dynamic-scope.js [new file with mode: 0644]
test/webkit/finally-codegen-failure-expected.txt [new file with mode: 0644]
test/webkit/finally-codegen-failure.js [new file with mode: 0644]
test/webkit/flatten-dictionary-structure-from-which-all-properties-were-deleted-expected.txt [new file with mode: 0644]
test/webkit/flatten-dictionary-structure-from-which-all-properties-were-deleted.js [new file with mode: 0644]
test/webkit/for-in-avoid-duplicates-expected.txt [new file with mode: 0644]
test/webkit/for-in-avoid-duplicates.js [new file with mode: 0644]
test/webkit/for-in-cached-expected.txt [new file with mode: 0644]
test/webkit/for-in-cached.js [new file with mode: 0644]
test/webkit/for-in-exeception-expected.txt [new file with mode: 0644]
test/webkit/for-in-exeception.js [new file with mode: 0644]
test/webkit/for-in-to-text-expected.txt [new file with mode: 0644]
test/webkit/for-in-to-text.js [new file with mode: 0644]
test/webkit/for-in-var-scope-expected.txt [new file with mode: 0644]
test/webkit/for-in-var-scope.js [new file with mode: 0644]
test/webkit/function-apply-aliased-expected.txt [new file with mode: 0644]
test/webkit/function-apply-aliased.js [new file with mode: 0644]
test/webkit/function-call-aliased-expected.txt [new file with mode: 0644]
test/webkit/function-call-aliased.js [new file with mode: 0644]
test/webkit/function-call-register-allocation-expected.txt [new file with mode: 0644]
test/webkit/function-call-register-allocation.js [new file with mode: 0644]
test/webkit/function-constructor-newline-after-brace-expected.txt [new file with mode: 0644]
test/webkit/function-constructor-newline-after-brace.js [new file with mode: 0644]
test/webkit/function-constructor-single-line-comment-expected.txt [new file with mode: 0644]
test/webkit/function-constructor-single-line-comment.js [new file with mode: 0644]
test/webkit/function-declaration-expected.txt [new file with mode: 0644]
test/webkit/function-declaration-statement-expected.txt [new file with mode: 0644]
test/webkit/function-declaration-statement.js [new file with mode: 0644]
test/webkit/function-declaration.js [new file with mode: 0644]
test/webkit/function-declarations-in-switch-statement-expected.txt [new file with mode: 0644]
test/webkit/function-declarations-in-switch-statement.js [new file with mode: 0644]
test/webkit/function-dot-apply-replace-base-expected.txt [new file with mode: 0644]
test/webkit/function-dot-apply-replace-base.js [new file with mode: 0644]
test/webkit/function-dot-length-read-only-expected.txt [new file with mode: 0644]
test/webkit/function-dot-length-read-only.js [new file with mode: 0644]
test/webkit/function-prototype-descriptor-expected.txt [new file with mode: 0644]
test/webkit/function-prototype-descriptor.js [new file with mode: 0644]
test/webkit/function-toString-object-literals-expected.txt [new file with mode: 0644]
test/webkit/function-toString-object-literals.js [new file with mode: 0644]
test/webkit/get-by-pname-expected.txt [new file with mode: 0644]
test/webkit/get-by-pname-non-final-object-expected.txt [new file with mode: 0644]
test/webkit/get-by-pname-non-final-object.js [new file with mode: 0644]
test/webkit/get-by-pname-that-looks-like-a-patchable-get-by-val-expected.txt [new file with mode: 0644]
test/webkit/get-by-pname-that-looks-like-a-patchable-get-by-val.js [new file with mode: 0644]
test/webkit/get-by-pname.js [new file with mode: 0644]
test/webkit/getter-setter-gc-expected.txt [new file with mode: 0644]
test/webkit/getter-setter-gc.js [new file with mode: 0644]
test/webkit/global-resolve-through-eval-expected.txt [new file with mode: 0644]
test/webkit/global-resolve-through-eval.js [new file with mode: 0644]
test/webkit/gmail-re-re-expected.txt [new file with mode: 0644]
test/webkit/gmail-re-re.js [new file with mode: 0644]
test/webkit/has-own-property-expected.txt [new file with mode: 0644]
test/webkit/has-own-property.js [new file with mode: 0644]
test/webkit/ignored-result-null-comparison-crash-expected.txt [new file with mode: 0644]
test/webkit/ignored-result-null-comparison-crash.js [new file with mode: 0644]
test/webkit/ignored-result-ref-crash-expected.txt [new file with mode: 0644]
test/webkit/ignored-result-ref-crash.js [new file with mode: 0644]
test/webkit/indexed-setter-on-global-object-expected.txt [new file with mode: 0644]
test/webkit/indexed-setter-on-global-object.js [new file with mode: 0644]
test/webkit/instance-of-immediates-expected.txt [new file with mode: 0644]
test/webkit/instance-of-immediates.js [new file with mode: 0644]
test/webkit/instanceof-operator-expected.txt [new file with mode: 0644]
test/webkit/instanceof-operator.js [new file with mode: 0644]
test/webkit/integer-extremes-expected.txt [new file with mode: 0644]
test/webkit/integer-extremes.js [new file with mode: 0644]
test/webkit/interpreter-no-activation-expected.txt [new file with mode: 0644]
test/webkit/interpreter-no-activation.js [new file with mode: 0644]
test/webkit/invalid-callframe-during-unwind-expected.txt [new file with mode: 0644]
test/webkit/invalid-callframe-during-unwind.js [new file with mode: 0644]
test/webkit/isPrototypeOf-expected.txt [new file with mode: 0644]
test/webkit/isPrototypeOf.js [new file with mode: 0644]
test/webkit/jit-float32-array-nan-expected.txt [new file with mode: 0644]
test/webkit/jit-float32-array-nan.js [new file with mode: 0644]
test/webkit/js-continue-break-restrictions-expected.txt [new file with mode: 0644]
test/webkit/js-continue-break-restrictions.js [new file with mode: 0644]
test/webkit/keywords-and-reserved_words-expected.txt [new file with mode: 0644]
test/webkit/keywords-and-reserved_words.js [new file with mode: 0644]
test/webkit/legitimately-captured-argument-expected.txt [new file with mode: 0644]
test/webkit/legitimately-captured-argument.js [new file with mode: 0644]
test/webkit/logical-or-jless-expected.txt [new file with mode: 0644]
test/webkit/logical-or-jless.js [new file with mode: 0644]
test/webkit/math-expected.txt [new file with mode: 0644]
test/webkit/math-transforms-expected.txt [new file with mode: 0644]
test/webkit/math-transforms.js [new file with mode: 0644]
test/webkit/math.js [new file with mode: 0644]
test/webkit/mod-by-zero-expected.txt [new file with mode: 0644]
test/webkit/mod-by-zero.js [new file with mode: 0644]
test/webkit/mod-crash-expected.txt [new file with mode: 0644]
test/webkit/mod-crash.js [new file with mode: 0644]
test/webkit/multiline-comment-newline-expected.txt [new file with mode: 0644]
test/webkit/multiline-comment-newline.js [new file with mode: 0644]
test/webkit/named-function-expression-expected.txt [new file with mode: 0644]
test/webkit/named-function-expression.js [new file with mode: 0644]
test/webkit/nested-functions-expected.txt [new file with mode: 0644]
test/webkit/nested-functions.js [new file with mode: 0644]
test/webkit/new-array-double-with-holes-expected.txt [new file with mode: 0644]
test/webkit/new-array-double-with-holes.js [new file with mode: 0644]
test/webkit/no-semi-insertion-at-end-of-script-expected.txt [new file with mode: 0644]
test/webkit/no-semi-insertion-at-end-of-script.js [new file with mode: 0644]
test/webkit/number-cell-reuse-expected.txt [new file with mode: 0644]
test/webkit/number-cell-reuse.js [new file with mode: 0644]
test/webkit/number-parsing-crash-expected.txt [new file with mode: 0644]
test/webkit/number-parsing-crash.js [new file with mode: 0644]
test/webkit/number-toExponential-expected.txt [new file with mode: 0644]
test/webkit/number-toExponential.js [new file with mode: 0644]
test/webkit/numeric-compare-expected.txt [new file with mode: 0644]
test/webkit/numeric-compare.js [new file with mode: 0644]
test/webkit/numeric-conversion-expected.txt [new file with mode: 0644]
test/webkit/numeric-conversion.js [new file with mode: 0644]
test/webkit/object-literal-direct-put-expected.txt [new file with mode: 0644]
test/webkit/object-literal-direct-put.js [new file with mode: 0644]
test/webkit/object-literal-syntax-expected.txt [new file with mode: 0644]
test/webkit/object-literal-syntax.js [new file with mode: 0644]
test/webkit/order-of-operations-expected.txt [new file with mode: 0644]
test/webkit/order-of-operations.js [new file with mode: 0644]
test/webkit/parse-backslash-before-newline-expected.txt [new file with mode: 0644]
test/webkit/parse-backslash-before-newline.js [new file with mode: 0644]
test/webkit/parse-nan-expected.txt [new file with mode: 0644]
test/webkit/parse-nan.js [new file with mode: 0644]
test/webkit/parseFloat-expected.txt [new file with mode: 0644]
test/webkit/parseFloat.js [new file with mode: 0644]
test/webkit/parseInt-expected.txt [new file with mode: 0644]
test/webkit/parseInt.js [new file with mode: 0644]
test/webkit/parser-high-byte-character-expected.txt [new file with mode: 0644]
test/webkit/parser-high-byte-character.js [new file with mode: 0644]
test/webkit/parser-xml-close-comment-expected.txt [new file with mode: 0644]
test/webkit/parser-xml-close-comment.js [new file with mode: 0644]
test/webkit/polymorphic-construct-expected.txt [new file with mode: 0644]
test/webkit/polymorphic-construct.js [new file with mode: 0644]
test/webkit/pretty-print-expected.txt [new file with mode: 0644]
test/webkit/pretty-print.js [new file with mode: 0644]
test/webkit/preventExtensions-expected.txt [new file with mode: 0644]
test/webkit/preventExtensions.js [new file with mode: 0644]
test/webkit/primitive-method-this-expected.txt [new file with mode: 0644]
test/webkit/primitive-method-this.js [new file with mode: 0644]
test/webkit/property-getters-and-setters-expected.txt [new file with mode: 0644]
test/webkit/property-getters-and-setters.js [new file with mode: 0644]
test/webkit/property-iteration-expected.txt [new file with mode: 0644]
test/webkit/property-iteration.js [new file with mode: 0644]
test/webkit/propertyIsEnumerable-expected.txt [new file with mode: 0644]
test/webkit/propertyIsEnumerable.js [new file with mode: 0644]
test/webkit/prototypes-expected.txt [new file with mode: 0644]
test/webkit/prototypes.js [new file with mode: 0644]
test/webkit/reentrant-caching-expected.txt [new file with mode: 0644]
test/webkit/reentrant-caching.js [new file with mode: 0644]
test/webkit/reentrant-call-unwind-expected.txt [new file with mode: 0644]
test/webkit/reentrant-call-unwind.js [new file with mode: 0644]
test/webkit/regexp-alternatives-expected.txt [new file with mode: 0644]
test/webkit/regexp-alternatives.js [new file with mode: 0644]
test/webkit/regexp-backreferences-expected.txt [new file with mode: 0644]
test/webkit/regexp-backreferences.js [new file with mode: 0644]
test/webkit/regexp-char-insensitive-expected.txt [new file with mode: 0644]
test/webkit/regexp-char-insensitive.js [new file with mode: 0644]
test/webkit/regexp-character-match-out-of-order-expected.txt [new file with mode: 0644]
test/webkit/regexp-character-match-out-of-order.js [new file with mode: 0644]
test/webkit/regexp-compile-crash-expected.txt [new file with mode: 0644]
test/webkit/regexp-compile-crash.js [new file with mode: 0644]
test/webkit/regexp-compile-expected.txt [new file with mode: 0644]
test/webkit/regexp-compile.js [new file with mode: 0644]
test/webkit/regexp-divequal-expected.txt [new file with mode: 0644]
test/webkit/regexp-divequal.js [new file with mode: 0644]
test/webkit/regexp-extended-characters-match-expected.txt [new file with mode: 0644]
test/webkit/regexp-extended-characters-match.js [new file with mode: 0644]
test/webkit/regexp-extended-characters-more-expected.txt [new file with mode: 0644]
test/webkit/regexp-extended-characters-more.js [new file with mode: 0644]
test/webkit/regexp-find-first-asserted-expected.txt [new file with mode: 0644]
test/webkit/regexp-find-first-asserted.js [new file with mode: 0644]
test/webkit/regexp-in-and-foreach-handling-expected.txt [new file with mode: 0644]
test/webkit/regexp-in-and-foreach-handling.js [new file with mode: 0644]
test/webkit/regexp-literals-arent-constants-expected.txt [new file with mode: 0644]
test/webkit/regexp-literals-arent-constants.js [new file with mode: 0644]
test/webkit/regexp-many-brackets-expected.txt [new file with mode: 0644]
test/webkit/regexp-many-brackets.js [new file with mode: 0644]
test/webkit/regexp-negative-special-characters-expected.txt [new file with mode: 0644]
test/webkit/regexp-negative-special-characters.js [new file with mode: 0644]
test/webkit/regexp-non-bmp-expected.txt [new file with mode: 0644]
test/webkit/regexp-non-bmp.js [new file with mode: 0644]
test/webkit/regexp-non-character-expected.txt [new file with mode: 0644]
test/webkit/regexp-non-character.js [new file with mode: 0644]
test/webkit/regexp-norepeat-expected.txt [new file with mode: 0644]
test/webkit/regexp-norepeat.js [new file with mode: 0644]
test/webkit/regexp-range-bound-ffff-expected.txt [new file with mode: 0644]
test/webkit/regexp-range-bound-ffff.js [new file with mode: 0644]
test/webkit/regexp-zero-length-alternatives-expected.txt [new file with mode: 0644]
test/webkit/regexp-zero-length-alternatives.js [new file with mode: 0644]
test/webkit/registerCachingAcrossBranchTargets-expected.txt [new file with mode: 0644]
test/webkit/registerCachingAcrossBranchTargets.js [new file with mode: 0644]
test/webkit/rehash-assign-expected.txt [new file with mode: 0644]
test/webkit/rehash-assign.js [new file with mode: 0644]
test/webkit/reserved-words-expected.txt [new file with mode: 0644]
test/webkit/reserved-words.js [new file with mode: 0644]
test/webkit/resize-array-assign-expected.txt [new file with mode: 0644]
test/webkit/resize-array-assign.js [new file with mode: 0644]
test/webkit/resolve-arguments-from-scope-expected.txt [new file with mode: 0644]
test/webkit/resolve-arguments-from-scope.js [new file with mode: 0644]
test/webkit/slash-lineterminator-parse-expected.txt [new file with mode: 0644]
test/webkit/slash-lineterminator-parse.js [new file with mode: 0644]
test/webkit/sort-large-array-expected.txt [new file with mode: 0644]
test/webkit/sort-large-array.js [new file with mode: 0644]
test/webkit/sort-no-jit-code-crash-expected.txt [new file with mode: 0644]
test/webkit/sort-no-jit-code-crash.js [new file with mode: 0644]
test/webkit/sort-non-numbers-expected.txt [new file with mode: 0644]
test/webkit/sort-non-numbers.js [new file with mode: 0644]
test/webkit/sort-randomly-expected.txt [new file with mode: 0644]
test/webkit/sort-randomly.js [new file with mode: 0644]
test/webkit/sort-with-side-effecting-comparisons-expected.txt [new file with mode: 0644]
test/webkit/sort-with-side-effecting-comparisons.js [new file with mode: 0644]
test/webkit/sparse-array-expected.txt [new file with mode: 0644]
test/webkit/sparse-array.js [new file with mode: 0644]
test/webkit/stack-overflow-catch-expected.txt [new file with mode: 0644]
test/webkit/stack-overflow-catch.js [new file with mode: 0644]
test/webkit/stack-unwinding-expected.txt [new file with mode: 0644]
test/webkit/stack-unwinding.js [new file with mode: 0644]
test/webkit/statement-list-register-crash-expected.txt [new file with mode: 0644]
test/webkit/statement-list-register-crash.js [new file with mode: 0644]
test/webkit/static-scope-object-expected.txt [new file with mode: 0644]
test/webkit/static-scope-object.js [new file with mode: 0644]
test/webkit/strict-callback-this-expected.txt [new file with mode: 0644]
test/webkit/strict-callback-this.js [new file with mode: 0644]
test/webkit/strict-throw-type-error-expected.txt [new file with mode: 0644]
test/webkit/strict-throw-type-error.js [new file with mode: 0644]
test/webkit/string-from-char-code-expected.txt [new file with mode: 0644]
test/webkit/string-from-char-code.js [new file with mode: 0644]
test/webkit/string-index-overflow-expected.txt [new file with mode: 0644]
test/webkit/string-index-overflow.js [new file with mode: 0644]
test/webkit/string-property-deletion-expected.txt [new file with mode: 0644]
test/webkit/string-property-deletion.js [new file with mode: 0644]
test/webkit/string-property-iteration-expected.txt [new file with mode: 0644]
test/webkit/string-property-iteration.js [new file with mode: 0644]
test/webkit/string-slice-abnormal-values-expected.txt [new file with mode: 0644]
test/webkit/string-slice-abnormal-values.js [new file with mode: 0644]
test/webkit/string-sort-expected.txt [new file with mode: 0644]
test/webkit/string-sort.js [new file with mode: 0644]
test/webkit/string-substr-expected.txt [new file with mode: 0644]
test/webkit/string-substr.js [new file with mode: 0644]
test/webkit/string-trim-expected.txt [new file with mode: 0644]
test/webkit/string-trim.js [new file with mode: 0644]
test/webkit/string_replace-expected.txt [new file with mode: 0644]
test/webkit/string_replace.js [new file with mode: 0644]
test/webkit/this-non-object-proto-expected.txt [new file with mode: 0644]
test/webkit/this-non-object-proto.js [new file with mode: 0644]
test/webkit/throw-from-finally-expected.txt [new file with mode: 0644]
test/webkit/throw-from-finally.js [new file with mode: 0644]
test/webkit/toString-elision-trailing-comma-expected.txt [new file with mode: 0644]
test/webkit/toString-elision-trailing-comma.js [new file with mode: 0644]
test/webkit/toString-for-var-decl-expected.txt [new file with mode: 0644]
test/webkit/toString-for-var-decl.js [new file with mode: 0644]
test/webkit/toString-number-dot-expr-expected.txt [new file with mode: 0644]
test/webkit/toString-number-dot-expr.js [new file with mode: 0644]
test/webkit/toString-prefix-postfix-preserve-parens-expected.txt [new file with mode: 0644]
test/webkit/toString-prefix-postfix-preserve-parens.js [new file with mode: 0644]
test/webkit/toString-recursion-expected.txt [new file with mode: 0644]
test/webkit/toString-recursion.js [new file with mode: 0644]
test/webkit/tostring-exception-in-property-access-expected.txt [new file with mode: 0644]
test/webkit/tostring-exception-in-property-access.js [new file with mode: 0644]
test/webkit/try-catch-try-try-catch-try-finally-return-catch-finally-expected.txt [new file with mode: 0644]
test/webkit/try-catch-try-try-catch-try-finally-return-catch-finally.js [new file with mode: 0644]
test/webkit/try-try-return-finally-finally-expected.txt [new file with mode: 0644]
test/webkit/try-try-return-finally-finally.js [new file with mode: 0644]
test/webkit/typeof-codegen-crash-expected.txt [new file with mode: 0644]
test/webkit/typeof-codegen-crash.js [new file with mode: 0644]
test/webkit/typeof-constant-string-expected.txt [new file with mode: 0644]
test/webkit/typeof-constant-string.js [new file with mode: 0644]
test/webkit/unexpected-constant-crash-expected.txt [new file with mode: 0644]
test/webkit/unexpected-constant-crash.js [new file with mode: 0644]
test/webkit/unmatching-argument-count-expected.txt [new file with mode: 0644]
test/webkit/unmatching-argument-count.js [new file with mode: 0644]
test/webkit/var-declarations-zero-width-expected.txt [new file with mode: 0644]
test/webkit/var-declarations-zero-width.js [new file with mode: 0644]
test/webkit/var-shadows-arg-crash-expected.txt [new file with mode: 0644]
test/webkit/var-shadows-arg-crash.js [new file with mode: 0644]
test/webkit/var-shadows-arg-gc-crash-expected.txt [new file with mode: 0644]
test/webkit/var-shadows-arg-gc-crash.js [new file with mode: 0644]
test/webkit/vardecl-blocks-init-expected.txt [new file with mode: 0644]
test/webkit/vardecl-blocks-init.js [new file with mode: 0644]

diff --git a/test/webkit/Array-isArray-expected.txt b/test/webkit/Array-isArray-expected.txt
new file mode 100644 (file)
index 0000000..5af2c15
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct behaviour of Array.array
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Array.isArray([]) is true
+PASS Array.isArray(new Array) is true
+PASS Array.isArray(Array()) is true
+PASS Array.isArray('abc'.match(/(a)*/g)) is true
+PASS (function(){ return Array.isArray(arguments); })() is false
+PASS Array.isArray() is false
+PASS Array.isArray(null) is false
+PASS Array.isArray(undefined) is false
+PASS Array.isArray(true) is false
+PASS Array.isArray(false) is false
+PASS Array.isArray('a string') is false
+PASS Array.isArray({}) is false
+PASS Array.isArray({length: 5}) is false
+PASS Array.isArray({__proto__: Array.prototype, length:1, 0:1, 1:2}) is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/Array-isArray.js b/test/webkit/Array-isArray.js
new file mode 100644 (file)
index 0000000..995d7dc
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct behaviour of Array.array");
+
+shouldBeTrue("Array.isArray([])");
+shouldBeTrue("Array.isArray(new Array)");
+shouldBeTrue("Array.isArray(Array())");
+shouldBeTrue("Array.isArray('abc'.match(/(a)*/g))");
+shouldBeFalse("(function(){ return Array.isArray(arguments); })()");
+shouldBeFalse("Array.isArray()");
+shouldBeFalse("Array.isArray(null)");
+shouldBeFalse("Array.isArray(undefined)");
+shouldBeFalse("Array.isArray(true)");
+shouldBeFalse("Array.isArray(false)");
+shouldBeFalse("Array.isArray('a string')");
+shouldBeFalse("Array.isArray({})");
+shouldBeFalse("Array.isArray({length: 5})");
+shouldBeFalse("Array.isArray({__proto__: Array.prototype, length:1, 0:1, 1:2})");
diff --git a/test/webkit/JSON-stringify-replacer-expected.txt b/test/webkit/JSON-stringify-replacer-expected.txt
new file mode 100644 (file)
index 0000000..cea851e
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct behaviour of replacer functions in JSON.stringify
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS JSON.stringify(object, returnUndefined) is undefined.
+PASS JSON.stringify(array, returnUndefined) is undefined.
+PASS JSON.stringify(object, returnObjectFor1) is '{"0":0,"1":{},"2":2}'
+PASS JSON.stringify(array, returnObjectFor1) is '[0,{},2,null]'
+PASS JSON.stringify(object, returnArrayFor1) is '{"0":0,"1":[],"2":2}'
+PASS JSON.stringify(array, returnArrayFor1) is '[0,[],2,null]'
+PASS JSON.stringify(object, returnUndefinedFor1) is '{"0":0,"2":2}'
+PASS JSON.stringify(array, returnUndefinedFor1) is '[0,null,2,null]'
+PASS JSON.stringify(object, returnFunctionFor1) is '{"0":0,"2":2}'
+PASS JSON.stringify(array, returnFunctionFor1) is '[0,null,2,null]'
+PASS JSON.stringify(object, returnNullFor1) is '{"0":0,"1":null,"2":2}'
+PASS JSON.stringify(array, returnNullFor1) is '[0,null,2,null]'
+PASS JSON.stringify(object, returnStringForUndefined) is '{"0":0,"1":1,"2":2,"3":"undefined value"}'
+PASS JSON.stringify(array, returnStringForUndefined) is '[0,1,2,"undefined value"]'
+PASS JSON.stringify(object, returnCycleObjectFor1) threw exception TypeError: Converting circular structure to JSON.
+PASS JSON.stringify(array, returnCycleObjectFor1) threw exception TypeError: Converting circular structure to JSON.
+PASS JSON.stringify(object, returnCycleArrayFor1) threw exception TypeError: Converting circular structure to JSON.
+PASS JSON.stringify(array, returnCycleArrayFor1) threw exception TypeError: Converting circular structure to JSON.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/JSON-stringify-replacer.js b/test/webkit/JSON-stringify-replacer.js
new file mode 100644 (file)
index 0000000..def10e8
--- /dev/null
@@ -0,0 +1,95 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct behaviour of replacer functions in JSON.stringify");
+
+var object = {0:0, 1:1, 2:2, 3:undefined};
+var array = [0, 1, 2, undefined];
+function returnUndefined(){}
+function returnObjectFor1(k, v) {
+    if (k == "1")
+        return {};
+    return v;
+}
+function returnArrayFor1(k, v) {
+    if (k == "1")
+        return [];
+    return v;
+}
+function returnUndefinedFor1(k, v) {
+    if (k == "1")
+        return undefined;
+    return v;
+}
+function returnNullFor1(k, v) {
+    if (k == "1")
+        return null;
+    return v;
+}
+function returnCycleObjectFor1(k, v) {
+    if (k == "1")
+        return object;
+    return v;
+}
+function returnCycleArrayFor1(k, v) {
+    if (k == "1")
+        return array;
+    return v;
+}
+function returnFunctionFor1(k, v) {
+    if (k == "1")
+        return function(){};
+    return v;
+}
+function returnStringForUndefined(k, v) {
+    if (v === undefined)
+        return "undefined value";
+    return v;
+}
+
+shouldBeUndefined("JSON.stringify(object, returnUndefined)");
+shouldBeUndefined("JSON.stringify(array, returnUndefined)");
+
+shouldBe("JSON.stringify(object, returnObjectFor1)", '\'{"0":0,"1":{},"2":2}\'');
+shouldBe("JSON.stringify(array, returnObjectFor1)", '\'[0,{},2,null]\'');
+
+shouldBe("JSON.stringify(object, returnArrayFor1)", '\'{"0":0,"1":[],"2":2}\'');
+shouldBe("JSON.stringify(array, returnArrayFor1)", '\'[0,[],2,null]\'');
+
+shouldBe("JSON.stringify(object, returnUndefinedFor1)", '\'{"0":0,"2":2}\'');
+shouldBe("JSON.stringify(array, returnUndefinedFor1)", '\'[0,null,2,null]\'');
+
+shouldBe("JSON.stringify(object, returnFunctionFor1)", '\'{"0":0,"2":2}\'');
+shouldBe("JSON.stringify(array, returnFunctionFor1)", '\'[0,null,2,null]\'');
+
+shouldBe("JSON.stringify(object, returnNullFor1)", '\'{"0":0,"1":null,"2":2}\'');
+shouldBe("JSON.stringify(array, returnNullFor1)", '\'[0,null,2,null]\'');
+
+shouldBe("JSON.stringify(object, returnStringForUndefined)", '\'{"0":0,"1":1,"2":2,"3":"undefined value"}\'');
+shouldBe("JSON.stringify(array, returnStringForUndefined)", '\'[0,1,2,"undefined value"]\'');
+
+shouldThrow("JSON.stringify(object, returnCycleObjectFor1)");
+shouldThrow("JSON.stringify(array, returnCycleObjectFor1)");
+
+shouldThrow("JSON.stringify(object, returnCycleArrayFor1)");
+shouldThrow("JSON.stringify(array, returnCycleArrayFor1)");
diff --git a/test/webkit/Object-create-expected.txt b/test/webkit/Object-create-expected.txt
new file mode 100644 (file)
index 0000000..519cfb4
--- /dev/null
@@ -0,0 +1,48 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct behaviour of Object.defineProperties
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Object.create() threw exception TypeError: Object prototype may only be an Object or null.
+PASS Object.create('a string') threw exception TypeError: Object prototype may only be an Object or null.
+PASS Object.create({}, 'a string') threw exception TypeError: Property description must be an object: a.
+PASS Object.create(null, 'a string') threw exception TypeError: Property description must be an object: a.
+PASS JSON.stringify(Object.create(null,{property:{value:'foo', enumerable:true}, property2:{value:'foo', enumerable:true}})) is '{"property":"foo","property2":"foo"}'
+PASS JSON.stringify(Object.create({},{property:{value:'foo', enumerable:true}, property2:{value:'foo', enumerable:true}})) is '{"property":"foo","property2":"foo"}'
+PASS JSON.stringify(Object.create({},{property:{value:'foo'}, property2:{value:'foo', enumerable:true}})) is '{"property2":"foo"}'
+PASS JSON.stringify(Object.create(null,{property:{value:'foo'}, property2:{value:'foo', enumerable:true}})) is '{"property2":"foo"}'
+PASS Object.getPrototypeOf(Object.create(Array.prototype)) is Array.prototype
+PASS Object.getPrototypeOf(Object.create(null)) is null
+PASS Object.create(null, DescriptorWithValueGetter).foo is true
+PASS Object.create(null, DescriptorWithEnumerableGetter).foo is true
+PASS Object.create(null, DescriptorWithConfigurableGetter).foo is true
+PASS Object.create(null, DescriptorWithWritableGetter).foo is true
+PASS Object.create(null, DescriptorWithGetGetter).foo is true
+PASS Object.create(null, DescriptorWithSetGetter).foo is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/Object-create.js b/test/webkit/Object-create.js
new file mode 100644 (file)
index 0000000..97fd740
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct behaviour of Object.defineProperties");
+
+shouldThrow("Object.create()");
+shouldThrow("Object.create('a string')");
+shouldThrow("Object.create({}, 'a string')");
+shouldThrow("Object.create(null, 'a string')");
+shouldBe("JSON.stringify(Object.create(null,{property:{value:'foo', enumerable:true}, property2:{value:'foo', enumerable:true}}))", '\'{"property":"foo","property2":"foo"}\'');
+shouldBe("JSON.stringify(Object.create({},{property:{value:'foo', enumerable:true}, property2:{value:'foo', enumerable:true}}))", '\'{"property":"foo","property2":"foo"}\'');
+shouldBe("JSON.stringify(Object.create({},{property:{value:'foo'}, property2:{value:'foo', enumerable:true}}))", '\'{"property2":"foo"}\'');
+shouldBe("JSON.stringify(Object.create(null,{property:{value:'foo'}, property2:{value:'foo', enumerable:true}}))", '\'{"property2":"foo"}\'');
+shouldBe("Object.getPrototypeOf(Object.create(Array.prototype))", "Array.prototype");
+shouldBe("Object.getPrototypeOf(Object.create(null))", "null");
+function valueGet() { return true; }
+var DescriptorWithValueGetter = { foo: Object.create(null, { value: { get: valueGet }})};
+var DescriptorWithEnumerableGetter = { foo: Object.create(null, { value: {value: true}, enumerable: { get: valueGet }})};
+var DescriptorWithConfigurableGetter = { foo: Object.create(null, { value: {value: true}, configurable: { get: valueGet }})};
+var DescriptorWithWritableGetter = { foo: Object.create(null, { value: {value: true}, writable: { get: valueGet }})};
+var DescriptorWithGetGetter = { foo: Object.create(null, { get: { get: function() { return valueGet } }})};
+var DescriptorWithSetGetter = { foo: Object.create(null, { get: { value: valueGet}, set: { get: function(){ return valueGet; } }})};
+shouldBeTrue("Object.create(null, DescriptorWithValueGetter).foo");
+shouldBeTrue("Object.create(null, DescriptorWithEnumerableGetter).foo");
+shouldBeTrue("Object.create(null, DescriptorWithConfigurableGetter).foo");
+shouldBeTrue("Object.create(null, DescriptorWithWritableGetter).foo");
+shouldBeTrue("Object.create(null, DescriptorWithGetGetter).foo");
+shouldBeTrue("Object.create(null, DescriptorWithSetGetter).foo");
diff --git a/test/webkit/Object-defineProperties-expected.txt b/test/webkit/Object-defineProperties-expected.txt
new file mode 100644 (file)
index 0000000..50178b9
--- /dev/null
@@ -0,0 +1,42 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct behaviour of Object.defineProperties
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Object.defineProperties() threw exception TypeError: Object.defineProperties called on non-object.
+PASS Object.defineProperties('a string') threw exception TypeError: Object.defineProperties called on non-object.
+PASS Object.defineProperties({}, 'a string') threw exception TypeError: Property description must be an object: a.
+PASS JSON.stringify(Object.defineProperties({},{property:{value:'foo', enumerable:true}, property2:{value:'foo', enumerable:true}})) is '{"property":"foo","property2":"foo"}'
+PASS JSON.stringify(Object.defineProperties({},{property:{value:'foo'}, property2:{value:'foo', enumerable:true}})) is '{"property2":"foo"}'
+PASS JSON.stringify(Object.defineProperties({property:'foo'},{property:{value:'foo', enumerable:true}, property2:{value:'foo', enumerable:true}})) is '{"property":"foo","property2":"foo"}'
+PASS JSON.stringify(Object.defineProperties({property:'foo'},{property:{value:'foo', enumerable:false}, property2:{value:'foo', enumerable:true}})) is '{"property2":"foo"}'
+PASS JSON.stringify(Object.defineProperties({property:'foo'},{property:{value:'foo'}, property2:{value:'foo', enumerable:true}})) is '{"property":"foo","property2":"foo"}'
+PASS Object.defineProperties(emptyObject, {foo:{value: true}, bar:{get:function(){}, writable:true}}) threw exception TypeError: Invalid property.  A property cannot both have accessors and be writable or have a value, #<Object>.
+PASS 'foo' in emptyObject is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/Object-defineProperties.js b/test/webkit/Object-defineProperties.js
new file mode 100644 (file)
index 0000000..39067e6
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct behaviour of Object.defineProperties");
+
+shouldThrow("Object.defineProperties()");
+shouldThrow("Object.defineProperties('a string')");
+shouldThrow("Object.defineProperties({}, 'a string')");
+shouldBe("JSON.stringify(Object.defineProperties({},{property:{value:'foo', enumerable:true}, property2:{value:'foo', enumerable:true}}))", '\'{"property":"foo","property2":"foo"}\'');
+shouldBe("JSON.stringify(Object.defineProperties({},{property:{value:'foo'}, property2:{value:'foo', enumerable:true}}))", '\'{"property2":"foo"}\'');
+shouldBe("JSON.stringify(Object.defineProperties({property:'foo'},{property:{value:'foo', enumerable:true}, property2:{value:'foo', enumerable:true}}))", '\'{"property":"foo","property2":"foo"}\'');
+shouldBe("JSON.stringify(Object.defineProperties({property:'foo'},{property:{value:'foo', enumerable:false}, property2:{value:'foo', enumerable:true}}))", '\'{"property2":"foo"}\'');
+shouldBe("JSON.stringify(Object.defineProperties({property:'foo'},{property:{value:'foo'}, property2:{value:'foo', enumerable:true}}))", '\'{"property":"foo","property2":"foo"}\'');
+emptyObject={};
+shouldThrow("Object.defineProperties(emptyObject, {foo:{value: true}, bar:{get:function(){}, writable:true}})");
+shouldBeFalse("'foo' in emptyObject");
diff --git a/test/webkit/Object-keys-expected.txt b/test/webkit/Object-keys-expected.txt
new file mode 100644 (file)
index 0000000..f9aa9d1
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct behaviour of Object.keys
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Object.keys({}) is []
+PASS Object.keys({a:null}) is ['a']
+PASS Object.keys({a:null, b:null}) is ['a', 'b']
+PASS Object.keys({b:null, a:null}) is ['b', 'a']
+PASS Object.keys([]) is []
+PASS Object.keys([null]) is ['0']
+PASS Object.keys([null,null]) is ['0','1']
+PASS Object.keys([null,null,,,,null]) is ['0','1','5']
+PASS Object.keys({__proto__:{a:null}}) is []
+PASS Object.keys({__proto__:[1,2,3]}) is []
+PASS x=[];x.__proto__=[1,2,3];Object.keys(x) is []
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/Object-keys.js b/test/webkit/Object-keys.js
new file mode 100644 (file)
index 0000000..a8aba48
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct behaviour of Object.keys");
+
+shouldBe("Object.keys({})", "[]");
+shouldBe("Object.keys({a:null})", "['a']");
+shouldBe("Object.keys({a:null, b:null})", "['a', 'b']");
+shouldBe("Object.keys({b:null, a:null})", "['b', 'a']");
+shouldBe("Object.keys([])", "[]");
+shouldBe("Object.keys([null])", "['0']");
+shouldBe("Object.keys([null,null])", "['0','1']");
+shouldBe("Object.keys([null,null,,,,null])", "['0','1','5']");
+shouldBe("Object.keys({__proto__:{a:null}})", "[]");
+shouldBe("Object.keys({__proto__:[1,2,3]})", "[]");
+shouldBe("x=[];x.__proto__=[1,2,3];Object.keys(x)", "[]");
diff --git a/test/webkit/ToNumber-expected.txt b/test/webkit/ToNumber-expected.txt
new file mode 100644 (file)
index 0000000..16efd12
--- /dev/null
@@ -0,0 +1,170 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test the JavaScript ToNumber operation.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS +undefined is NaN
+PASS +null is 0
+PASS +false is 0
+PASS +true is 1
+PASS +2 is 2
+PASS +'' is 0
+PASS +' ' is 0
+PASS +' 1' is 1
+PASS +'1 ' is 1
+PASS +'x1' is NaN
+PASS +'1x' is NaN
+PASS +'0x1' is 1
+PASS +'1x0' is NaN
+PASS +(nullCharacter + '1') is NaN
+PASS +('1' + nullCharacter) is NaN
+PASS +('1' + nullCharacter + '1') is NaN
+PASS +(nonASCIICharacter + '1') is NaN
+PASS +('1' + nonASCIICharacter) is NaN
+PASS +('1' + nonASCIICharacter + '1') is NaN
+PASS +('1' + nonASCIINonSpaceCharacter) is NaN
+PASS +(nonASCIINonSpaceCharacter + '1') is NaN
+PASS +('1' + nonASCIINonSpaceCharacter + '1') is NaN
+PASS +(illegalUTF16Sequence + '1') is NaN
+PASS +('1' + illegalUTF16Sequence) is NaN
+PASS +('1' + illegalUTF16Sequence + '1') is NaN
+PASS +'inf' is NaN
+PASS +'infinity' is NaN
+PASS +'Inf' is NaN
+PASS +'+inf' is NaN
+PASS +'+infinity' is NaN
+PASS +'+Inf' is NaN
+PASS +'-inf' is NaN
+PASS +'-infinity' is NaN
+PASS +'-Inf' is NaN
+PASS +'Infinity' is Infinity
+PASS +'+Infinity' is Infinity
+PASS +'-Infinity' is -Infinity
+PASS +'++1' is NaN
+PASS +'AB' is NaN
+PASS +'0xAB' is 171
+PASS +'1e1' is 10
+PASS +'1E1' is 10
+PASS +tab is 0
+PASS +nbsp is 0
+PASS +ff is 0
+PASS +vt is 0
+PASS +cr is 0
+PASS +lf is 0
+PASS +ls is 0
+PASS +ps is 0
+PASS +oghamSpaceMark is 0
+PASS +mongolianVowelSeparator is 0
+PASS +enQuad is 0
+PASS +emQuad is 0
+PASS +enSpace is 0
+PASS +emSpace is 0
+PASS +threePerEmSpace is 0
+PASS +fourPerEmSpace is 0
+PASS +sixPerEmSpace is 0
+PASS +figureSpace is 0
+PASS +punctuationSpace is 0
+PASS +thinSpace is 0
+PASS +hairSpace is 0
+PASS +narrowNoBreakSpace is 0
+PASS +mediumMathematicalSpace is 0
+PASS +ideographicSpace is 0
+PASS +(tab + '1') is 1
+PASS +(nbsp + '1') is 1
+PASS +(ff + '1') is 1
+PASS +(vt + '1') is 1
+PASS +(cr + '1') is 1
+PASS +(lf + '1') is 1
+PASS +(ls + '1') is 1
+PASS +(ps + '1') is 1
+PASS +(oghamSpaceMark + '1') is 1
+PASS +(mongolianVowelSeparator + '1') is 1
+PASS +(enQuad + '1') is 1
+PASS +(emQuad + '1') is 1
+PASS +(enSpace + '1') is 1
+PASS +(emSpace + '1') is 1
+PASS +(threePerEmSpace + '1') is 1
+PASS +(fourPerEmSpace + '1') is 1
+PASS +(sixPerEmSpace + '1') is 1
+PASS +(figureSpace + '1') is 1
+PASS +(punctuationSpace + '1') is 1
+PASS +(thinSpace + '1') is 1
+PASS +(hairSpace + '1') is 1
+PASS +(narrowNoBreakSpace + '1') is 1
+PASS +(mediumMathematicalSpace + '1') is 1
+PASS +(ideographicSpace + '1') is 1
+PASS +('1' + tab) is 1
+PASS +('1' + nbsp) is 1
+PASS +('1' + ff) is 1
+PASS +('1' + vt) is 1
+PASS +('1' + cr) is 1
+PASS +('1' + lf) is 1
+PASS +('1' + ls) is 1
+PASS +('1' + ps) is 1
+PASS +('1' + oghamSpaceMark) is 1
+PASS +('1' + mongolianVowelSeparator) is 1
+PASS +('1' + enQuad) is 1
+PASS +('1' + emQuad) is 1
+PASS +('1' + enSpace) is 1
+PASS +('1' + emSpace) is 1
+PASS +('1' + threePerEmSpace) is 1
+PASS +('1' + fourPerEmSpace) is 1
+PASS +('1' + sixPerEmSpace) is 1
+PASS +('1' + figureSpace) is 1
+PASS +('1' + punctuationSpace) is 1
+PASS +('1' + thinSpace) is 1
+PASS +('1' + hairSpace) is 1
+PASS +('1' + narrowNoBreakSpace) is 1
+PASS +('1' + mediumMathematicalSpace) is 1
+PASS +('1' + ideographicSpace) is 1
+PASS +('1' + tab + '1') is NaN
+PASS +('1' + nbsp + '1') is NaN
+PASS +('1' + ff + '1') is NaN
+PASS +('1' + vt + '1') is NaN
+PASS +('1' + cr + '1') is NaN
+PASS +('1' + lf + '1') is NaN
+PASS +('1' + ls + '1') is NaN
+PASS +('1' + ps + '1') is NaN
+PASS +('1' + oghamSpaceMark + '1') is NaN
+PASS +('1' + mongolianVowelSeparator + '1') is NaN
+PASS +('1' + enQuad + '1') is NaN
+PASS +('1' + emQuad + '1') is NaN
+PASS +('1' + enSpace + '1') is NaN
+PASS +('1' + emSpace + '1') is NaN
+PASS +('1' + threePerEmSpace + '1') is NaN
+PASS +('1' + fourPerEmSpace + '1') is NaN
+PASS +('1' + sixPerEmSpace + '1') is NaN
+PASS +('1' + figureSpace + '1') is NaN
+PASS +('1' + punctuationSpace + '1') is NaN
+PASS +('1' + thinSpace + '1') is NaN
+PASS +('1' + hairSpace + '1') is NaN
+PASS +('1' + narrowNoBreakSpace + '1') is NaN
+PASS +('1' + mediumMathematicalSpace + '1') is NaN
+PASS +('1' + ideographicSpace + '1') is NaN
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/ToNumber.js b/test/webkit/ToNumber.js
new file mode 100644 (file)
index 0000000..8d1a40b
--- /dev/null
@@ -0,0 +1,194 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Test the JavaScript ToNumber operation.')
+
+var nullCharacter = String.fromCharCode(0);
+var nonASCIICharacter = String.fromCharCode(0x100);
+var nonASCIINonSpaceCharacter = String.fromCharCode(0x13A0);
+var illegalUTF16Sequence = String.fromCharCode(0xD800);
+
+var tab = String.fromCharCode(9);
+var nbsp = String.fromCharCode(0xA0);
+var ff = String.fromCharCode(0xC);
+var vt = String.fromCharCode(0xB);
+var cr = String.fromCharCode(0xD);
+var lf = String.fromCharCode(0xA);
+var ls = String.fromCharCode(0x2028);
+var ps = String.fromCharCode(0x2029);
+
+var oghamSpaceMark = String.fromCharCode(0x1680);
+var mongolianVowelSeparator = String.fromCharCode(0x180E);
+var enQuad = String.fromCharCode(0x2000);
+var emQuad = String.fromCharCode(0x2001);
+var enSpace = String.fromCharCode(0x2002);
+var emSpace = String.fromCharCode(0x2003);
+var threePerEmSpace = String.fromCharCode(0x2004);
+var fourPerEmSpace = String.fromCharCode(0x2005);
+var sixPerEmSpace = String.fromCharCode(0x2006);
+var figureSpace = String.fromCharCode(0x2007);
+var punctuationSpace = String.fromCharCode(0x2008);
+var thinSpace = String.fromCharCode(0x2009);
+var hairSpace = String.fromCharCode(0x200A);
+var narrowNoBreakSpace = String.fromCharCode(0x202F);
+var mediumMathematicalSpace = String.fromCharCode(0x205F);
+var ideographicSpace = String.fromCharCode(0x3000);
+
+shouldBe("+undefined", "NaN");
+shouldBe("+null", "0");
+shouldBe("+false", "0");
+shouldBe("+true", "1");
+shouldBe("+2", "2");
+shouldBe("+''", "0");
+shouldBe("+' '", "0");
+shouldBe("+' 1'", "1");
+shouldBe("+'1 '", "1");
+shouldBe("+'x1'", "NaN");
+shouldBe("+'1x'", "NaN");
+shouldBe("+'0x1'", "1");
+shouldBe("+'1x0'", "NaN");
+shouldBe("+(nullCharacter + '1')", "NaN");
+shouldBe("+('1' + nullCharacter)", "NaN");
+shouldBe("+('1' + nullCharacter + '1')", "NaN");
+shouldBe("+(nonASCIICharacter + '1')", "NaN");
+shouldBe("+('1' + nonASCIICharacter)", "NaN");
+shouldBe("+('1' + nonASCIICharacter + '1')", "NaN");
+shouldBe("+('1' + nonASCIINonSpaceCharacter)", "NaN");
+shouldBe("+(nonASCIINonSpaceCharacter + '1')", "NaN");
+shouldBe("+('1' + nonASCIINonSpaceCharacter + '1')", "NaN");
+shouldBe("+(illegalUTF16Sequence + '1')", "NaN");
+shouldBe("+('1' + illegalUTF16Sequence)", "NaN");
+shouldBe("+('1' + illegalUTF16Sequence + '1')", "NaN");
+shouldBe("+'inf'", "NaN");
+shouldBe("+'infinity'", "NaN");
+shouldBe("+'Inf'", "NaN");
+shouldBe("+'+inf'", "NaN");
+shouldBe("+'+infinity'", "NaN");
+shouldBe("+'+Inf'", "NaN");
+shouldBe("+'-inf'", "NaN");
+shouldBe("+'-infinity'", "NaN");
+shouldBe("+'-Inf'", "NaN");
+shouldBe("+'Infinity'", "Infinity");
+shouldBe("+'+Infinity'", "Infinity");
+shouldBe("+'-Infinity'", "-Infinity");
+shouldBe("+'++1'", "NaN");
+shouldBe("+'AB'", "NaN");
+shouldBe("+'0xAB'", "171");
+shouldBe("+'1e1'", "10");
+shouldBe("+'1E1'", "10");
+shouldBe("+tab", "0");
+shouldBe("+nbsp", "0");
+shouldBe("+ff", "0");
+shouldBe("+vt", "0");
+shouldBe("+cr", "0");
+shouldBe("+lf", "0");
+shouldBe("+ls", "0");
+shouldBe("+ps", "0");
+shouldBe("+oghamSpaceMark", "0");
+shouldBe("+mongolianVowelSeparator", "0");
+shouldBe("+enQuad", "0");
+shouldBe("+emQuad", "0");
+shouldBe("+enSpace", "0");
+shouldBe("+emSpace", "0");
+shouldBe("+threePerEmSpace", "0");
+shouldBe("+fourPerEmSpace", "0");
+shouldBe("+sixPerEmSpace", "0");
+shouldBe("+figureSpace", "0");
+shouldBe("+punctuationSpace", "0");
+shouldBe("+thinSpace", "0");
+shouldBe("+hairSpace", "0");
+shouldBe("+narrowNoBreakSpace", "0");
+shouldBe("+mediumMathematicalSpace", "0");
+shouldBe("+ideographicSpace", "0");
+shouldBe("+(tab + '1')", "1");
+shouldBe("+(nbsp + '1')", "1");
+shouldBe("+(ff + '1')", "1");
+shouldBe("+(vt + '1')", "1");
+shouldBe("+(cr + '1')", "1");
+shouldBe("+(lf + '1')", "1");
+shouldBe("+(ls + '1')", "1");
+shouldBe("+(ps + '1')", "1");
+shouldBe("+(oghamSpaceMark + '1')", "1");
+shouldBe("+(mongolianVowelSeparator + '1')", "1");
+shouldBe("+(enQuad + '1')", "1");
+shouldBe("+(emQuad + '1')", "1");
+shouldBe("+(enSpace + '1')", "1");
+shouldBe("+(emSpace + '1')", "1");
+shouldBe("+(threePerEmSpace + '1')", "1");
+shouldBe("+(fourPerEmSpace + '1')", "1");
+shouldBe("+(sixPerEmSpace + '1')", "1");
+shouldBe("+(figureSpace + '1')", "1");
+shouldBe("+(punctuationSpace + '1')", "1");
+shouldBe("+(thinSpace + '1')", "1");
+shouldBe("+(hairSpace + '1')", "1");
+shouldBe("+(narrowNoBreakSpace + '1')", "1");
+shouldBe("+(mediumMathematicalSpace + '1')", "1");
+shouldBe("+(ideographicSpace + '1')", "1");
+shouldBe("+('1' + tab)", "1");
+shouldBe("+('1' + nbsp)", "1");
+shouldBe("+('1' + ff)", "1");
+shouldBe("+('1' + vt)", "1");
+shouldBe("+('1' + cr)", "1");
+shouldBe("+('1' + lf)", "1");
+shouldBe("+('1' + ls)", "1");
+shouldBe("+('1' + ps)", "1");
+shouldBe("+('1' + oghamSpaceMark)", "1");
+shouldBe("+('1' + mongolianVowelSeparator)", "1");
+shouldBe("+('1' + enQuad)", "1");
+shouldBe("+('1' + emQuad)", "1");
+shouldBe("+('1' + enSpace)", "1");
+shouldBe("+('1' + emSpace)", "1");
+shouldBe("+('1' + threePerEmSpace)", "1");
+shouldBe("+('1' + fourPerEmSpace)", "1");
+shouldBe("+('1' + sixPerEmSpace)", "1");
+shouldBe("+('1' + figureSpace)", "1");
+shouldBe("+('1' + punctuationSpace)", "1");
+shouldBe("+('1' + thinSpace)", "1");
+shouldBe("+('1' + hairSpace)", "1");
+shouldBe("+('1' + narrowNoBreakSpace)", "1");
+shouldBe("+('1' + mediumMathematicalSpace)", "1");
+shouldBe("+('1' + ideographicSpace)", "1");
+shouldBe("+('1' + tab + '1')", "NaN");
+shouldBe("+('1' + nbsp + '1')", "NaN");
+shouldBe("+('1' + ff + '1')", "NaN");
+shouldBe("+('1' + vt + '1')", "NaN");
+shouldBe("+('1' + cr + '1')", "NaN");
+shouldBe("+('1' + lf + '1')", "NaN");
+shouldBe("+('1' + ls + '1')", "NaN");
+shouldBe("+('1' + ps + '1')", "NaN");
+shouldBe("+('1' + oghamSpaceMark + '1')", "NaN");
+shouldBe("+('1' + mongolianVowelSeparator + '1')", "NaN");
+shouldBe("+('1' + enQuad + '1')", "NaN");
+shouldBe("+('1' + emQuad + '1')", "NaN");
+shouldBe("+('1' + enSpace + '1')", "NaN");
+shouldBe("+('1' + emSpace + '1')", "NaN");
+shouldBe("+('1' + threePerEmSpace + '1')", "NaN");
+shouldBe("+('1' + fourPerEmSpace + '1')", "NaN");
+shouldBe("+('1' + sixPerEmSpace + '1')", "NaN");
+shouldBe("+('1' + figureSpace + '1')", "NaN");
+shouldBe("+('1' + punctuationSpace + '1')", "NaN");
+shouldBe("+('1' + thinSpace + '1')", "NaN");
+shouldBe("+('1' + hairSpace + '1')", "NaN");
+shouldBe("+('1' + narrowNoBreakSpace + '1')", "NaN");
+shouldBe("+('1' + mediumMathematicalSpace + '1')", "NaN");
+shouldBe("+('1' + ideographicSpace + '1')", "NaN");
diff --git a/test/webkit/add-recovery-expected.txt b/test/webkit/add-recovery-expected.txt
new file mode 100644 (file)
index 0000000..1d961b5
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that speculation recovery of destructive additions on unboxed integers works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS destructiveAddForBoxedInteger({x:1}, 2, 4) is 9
+PASS destructiveAddForBoxedInteger({x:2147483647}, 2, 4) is 2147483655
+PASS destructiveAddForBoxedInteger({x:2}, 2147483647, 4) is 4294967300
+PASS destructiveAddForBoxedInteger({x:2147483647}, 2147483647, 4) is 6442450945
+PASS destructiveAddForBoxedInteger({x:1}, 2, 2147483647) is 2147483652
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/add-recovery.js b/test/webkit/add-recovery.js
new file mode 100644 (file)
index 0000000..d204ef1
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that speculation recovery of destructive additions on unboxed integers works."
+);
+
+function destructiveAddForBoxedInteger(a,b,c) {
+    var a_ = a.x;
+    var d = a_ + b;
+    return c + d + b;
+}
+
+// warm-up foo to be integer
+for (var i = 0; i < 100; ++i) {
+    destructiveAddForBoxedInteger({x:1}, 2, 3);
+}
+
+shouldBe("destructiveAddForBoxedInteger({x:1}, 2, 4)", "9");
+shouldBe("destructiveAddForBoxedInteger({x:2147483647}, 2, 4)", "2147483655");
+shouldBe("destructiveAddForBoxedInteger({x:2}, 2147483647, 4)", "4294967300");
+shouldBe("destructiveAddForBoxedInteger({x:2147483647}, 2147483647, 4)", "6442450945");
+shouldBe("destructiveAddForBoxedInteger({x:1}, 2, 2147483647)", "2147483652");
diff --git a/test/webkit/apply-varargs-expected.txt b/test/webkit/apply-varargs-expected.txt
new file mode 100644 (file)
index 0000000..9c0ccb9
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test that we properly fill in missing args with "undefined" in JIT code.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS caller(0) is undefined
+PASS caller(1) is undefined
+PASS caller(2) is undefined
+PASS caller(3) is undefined
+PASS caller(4) is undefined
+PASS caller(5) is undefined
+PASS caller(6) is undefined
+PASS caller(7) is undefined
+PASS caller(8) is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/apply-varargs.js b/test/webkit/apply-varargs.js
new file mode 100644 (file)
index 0000000..cc7e380
--- /dev/null
@@ -0,0 +1,97 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Test that we properly fill in missing args with "undefined" in JIT code.');
+
+// Regression test for <rdar://problem/10763509>
+
+
+function callee(a1, a2, a3, a4, a5, a6, a7, a8)
+{
+    // We expect that the unused actual parameters will be filled
+    // with undefined.
+    if (a1 !== undefined)
+        return "Arg1 is wrong";
+    if (a2 !== undefined)
+        return "Arg2 is wrong";
+    if (a3 !== undefined)
+        return "Arg3 is wrong";
+    if (a4 !== undefined)
+        return "Arg4 is wrong";
+    if (a5 !== undefined)
+        return "Arg5 is wrong";
+    if (a6 !== undefined)
+        return "Arg6 is wrong";
+    if (a7 !== undefined)
+        return "Arg7 is wrong";
+    if (a8 !== undefined)
+        return "Arg8 is wrong";
+
+    return undefined;
+}
+
+function dummy(a1, a2, a3, a4, a5, a6, a7, a8)
+{
+}
+
+function BaseObj()
+{
+}
+
+function caller(testArgCount)
+{
+    var baseObj = new BaseObj();
+
+    var allArgs = [0, "String", callee, true, null, 2.5, [1, 2, 3], {'a': 1, 'b' : 2}];
+    argCounts = [8, testArgCount];
+
+    for (argCountIndex = 0; argCountIndex < argCounts.length; argCountIndex++) {
+        argCount = argCounts[argCountIndex];
+
+        var varArgs = [];
+        for (i = 0; i < argCount; i++)
+            varArgs[i] = undefined;
+
+        for (numCalls = 0; numCalls < 10; numCalls++) {
+            // Run multiple times so that the JIT kicks in
+            dummy.apply(baseObj, allArgs);
+            var result = callee.apply(baseObj, varArgs);
+            if (result != undefined)
+                return result;
+        }
+    }
+
+    return undefined;
+}
+
+shouldBe("caller(0)", 'undefined');
+shouldBe("caller(1)", 'undefined');
+shouldBe("caller(2)", 'undefined');
+shouldBe("caller(3)", 'undefined');
+shouldBe("caller(4)", 'undefined');
+shouldBe("caller(5)", 'undefined');
+shouldBe("caller(6)", 'undefined');
+shouldBe("caller(7)", 'undefined');
+shouldBe("caller(8)", 'undefined');
+
+var successfullyParsed = true;
diff --git a/test/webkit/arguments-bad-index-expected.txt b/test/webkit/arguments-bad-index-expected.txt
new file mode 100644 (file)
index 0000000..9295378
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks whether arguments crashes when passed a bad index.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS indexArguments(1, "a") is "a"
+PASS indexArguments("1 ", "a") is undefined
+PASS indexArguments(0xDEADBEEF) is undefined
+PASS indexArguments(0xFFFFFFFF) is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/arguments-bad-index.js b/test/webkit/arguments-bad-index.js
new file mode 100644 (file)
index 0000000..a4dd4d5
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks whether arguments crashes when passed a bad index."
+);
+
+function indexArguments(index)
+{
+    return arguments[index];
+}
+
+shouldBe('indexArguments(1, "a")', '"a"');
+shouldBe('indexArguments("1 ", "a")', 'undefined');
+shouldBe('indexArguments(0xDEADBEEF)', 'undefined');
+shouldBe('indexArguments(0xFFFFFFFF)', 'undefined');
+
diff --git a/test/webkit/array-constructor-host-call-expected.txt b/test/webkit/array-constructor-host-call-expected.txt
new file mode 100644 (file)
index 0000000..aeefefb
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that array construction via a host call works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS array instanceof Array is true
+PASS array.length is 100
+PASS array instanceof Array is true
+PASS array.length is 100
+PASS array instanceof Array is true
+PASS array.length is 100
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-constructor-host-call.js b/test/webkit/array-constructor-host-call.js
new file mode 100644 (file)
index 0000000..50d6489
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that array construction via a host call works."
+);
+
+function constructArray(arrayConstructor) {
+    return new arrayConstructor(100);
+}
+
+for (var i = 0; i < 3; ++i) {
+    var array = constructArray(Array);
+    shouldBeTrue("array instanceof Array");
+    shouldBe("array.length", "100");
+}
diff --git a/test/webkit/array-defineOwnProperty-expected.txt b/test/webkit/array-defineOwnProperty-expected.txt
new file mode 100644 (file)
index 0000000..c35bb0a
--- /dev/null
@@ -0,0 +1,67 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the behavior of [[DefineOwnProperty]] applied to Array objects (see ES5.1 15.4.5.1).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Object.defineProperty([], 'x', { get:function(){return true;} }).x is true
+PASS Object.defineProperty([], 'length', { value: 1 }).length is 1
+PASS var a = Object.defineProperty([], 'length', { writable: false }); a[1] = 1; a.length is 0
+PASS var a = Object.defineProperty([], 'length', { writable: false }); a.length = 1; a.length is 0
+PASS var a = Object.defineProperty([], 'length', {}); a.length = 1; a.length is 1
+PASS Object.defineProperty([], 'length', { get:function(){return true;} }) threw exception TypeError: Cannot redefine property: length.
+PASS Object.defineProperty([], 'length', { enumerable: true }) threw exception TypeError: Cannot redefine property: length.
+PASS Object.defineProperty([], 'length', { configurable: true }) threw exception TypeError: Cannot redefine property: length.
+PASS Object.defineProperty(Object.defineProperty([], 'length', { writable: false }), 'length', { writable: true }) threw exception TypeError: Cannot redefine property: length.
+PASS var a = Object.defineProperty([], '0', { value: 42 }); a[0] is 42
+PASS var a = Object.defineProperty([42], '0', { writable: false }); a[0] = 1; a[0] is 42
+PASS var a = Object.defineProperty([42], '0', { enumerable: false }); a[0] + Object.keys(a).length is 42
+PASS var a = Object.defineProperty([42], '0', { configurable: false }); a.length = 0; a[0] is 42
+PASS var foo = 0; Object.defineProperty([], '0', { set:function(x){foo = x;} })[0] = 42; foo is 42
+PASS Object.defineProperty([], '0', { get:function(){return true;} })[0] is true
+PASS Object.defineProperty(Object.defineProperty([true], '0', { configurable:true, writable: false }), '0', { writable: true })[0] is true
+PASS Object.defineProperty(Object.defineProperty([true], '0', { configurable:false, writable: false }), '0', { writable: true })[0] threw exception TypeError: Cannot redefine property: 0.
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: 1, writable:true }), '0', { value: 2 })[0] is 2
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: 1 }), '0', { value: 1 })[0] is 1
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: Number.NaN }), '0', { value: -Number.NaN })[0] is Number.NaN
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: 'okay'.substring(0,2) }), '0', { value: 'not ok'.substring(4,6) })[0] is "ok"
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: true }), '0', { value: true })[0] is true
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: false }), '0', { value: false })[0] is false
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: null }), '0', { value: null })[0] is null
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: undefined }), '0', { value: undefined })[0] is undefined
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: Math }), '0', { value: Math })[0] is Math
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: 1 }), '0', { value: 2 })[0] threw exception TypeError: Cannot redefine property: 0.
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: 'okay' }), '0', { value: 'not ok' })[0] threw exception TypeError: Cannot redefine property: 0.
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: true }), '0', { value: false })[0] threw exception TypeError: Cannot redefine property: 0.
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: false }), '0', { value: true })[0] threw exception TypeError: Cannot redefine property: 0.
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: Math }), '0', { value: Object })[0] threw exception TypeError: Cannot redefine property: 0.
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: null }), '0', { value: undefined })[0] threw exception TypeError: Cannot redefine property: 0.
+PASS Object.defineProperty(Object.defineProperty([], '0', { value: undefined }), '0', { value: null })[0] threw exception TypeError: Cannot redefine property: 0.
+PASS arrObj[0] = 42; arrObj.set; is true
+PASS arrObj[1] = true; arrObj[1]; is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-defineOwnProperty.js b/test/webkit/array-defineOwnProperty.js
new file mode 100644 (file)
index 0000000..68d4e19
--- /dev/null
@@ -0,0 +1,83 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This test checks the behavior of [[DefineOwnProperty]] applied to Array objects (see ES5.1 15.4.5.1).");
+
+// Test that properties other than length, array indices are handled as normal.
+shouldBeTrue("Object.defineProperty([], 'x', { get:function(){return true;} }).x");
+
+// The length property can be set, and can be made read-only.
+shouldBe("Object.defineProperty([], 'length', { value: 1 }).length", '1');
+shouldBe("var a = Object.defineProperty([], 'length', { writable: false }); a[1] = 1; a.length", '0');
+shouldBe("var a = Object.defineProperty([], 'length', { writable: false }); a.length = 1; a.length", '0');
+// If writable is not specified, it should not change.
+shouldBe("var a = Object.defineProperty([], 'length', {}); a.length = 1; a.length", '1');
+
+// The length property can be replaced with an accessor, or made either enumerable or configurable.
+shouldThrow("Object.defineProperty([], 'length', { get:function(){return true;} })");
+shouldThrow("Object.defineProperty([], 'length', { enumerable: true })");
+shouldThrow("Object.defineProperty([], 'length', { configurable: true })");
+shouldThrow("Object.defineProperty(Object.defineProperty([], 'length', { writable: false }), 'length', { writable: true })");
+
+// The value of an indexed property can be set.
+shouldBe("var a = Object.defineProperty([], '0', { value: 42 }); a[0]", '42');
+// An indexed property can be made non-writable/enumerable/configurable.
+shouldBe("var a = Object.defineProperty([42], '0', { writable: false }); a[0] = 1; a[0]", '42');
+shouldBe("var a = Object.defineProperty([42], '0', { enumerable: false }); a[0] + Object.keys(a).length", '42');
+shouldBe("var a = Object.defineProperty([42], '0', { configurable: false }); a.length = 0; a[0]", '42');
+// An indexed property can be defined as an accessor.
+shouldBe("var foo = 0; Object.defineProperty([], '0', { set:function(x){foo = x;} })[0] = 42; foo", '42');
+shouldBeTrue("Object.defineProperty([], '0', { get:function(){return true;} })[0]")
+// A configurable, non-writable property can be made writable, but a non-configurable one cannot.
+shouldBeTrue("Object.defineProperty(Object.defineProperty([true], '0', { configurable:true, writable: false }), '0', { writable: true })[0]");
+shouldThrow("Object.defineProperty(Object.defineProperty([true], '0', { configurable:false, writable: false }), '0', { writable: true })[0]");
+
+// Reassigning the value is okay if the property is writable.
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: 1, writable:true }), '0', { value: 2 })[0]", '2');
+// Reassigning the value is okay if the value doesn't change.
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: 1 }), '0', { value: 1 })[0]", '1');
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: Number.NaN }), '0', { value: -Number.NaN })[0]", 'Number.NaN');
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: 'okay'.substring(0,2) }), '0', { value: 'not ok'.substring(4,6) })[0]", '"ok"');
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: true }), '0', { value: true })[0]", 'true');
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: false }), '0', { value: false })[0]", 'false');
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: null }), '0', { value: null })[0]", 'null');
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: undefined }), '0', { value: undefined })[0]", 'undefined');
+shouldBe("Object.defineProperty(Object.defineProperty([], '0', { value: Math }), '0', { value: Math })[0]", 'Math');
+// Reassigning the value is not okay if the value changes.
+shouldThrow("Object.defineProperty(Object.defineProperty([], '0', { value: 1 }), '0', { value: 2 })[0]");
+shouldThrow("Object.defineProperty(Object.defineProperty([], '0', { value: 'okay' }), '0', { value: 'not ok' })[0]");
+shouldThrow("Object.defineProperty(Object.defineProperty([], '0', { value: true }), '0', { value: false })[0]");
+shouldThrow("Object.defineProperty(Object.defineProperty([], '0', { value: false }), '0', { value: true })[0]");
+shouldThrow("Object.defineProperty(Object.defineProperty([], '0', { value: Math }), '0', { value: Object })[0]");
+// Reassigning the value is not okay if the type changes.
+shouldThrow("Object.defineProperty(Object.defineProperty([], '0', { value: null }), '0', { value: undefined })[0]");
+shouldThrow("Object.defineProperty(Object.defineProperty([], '0', { value: undefined }), '0', { value: null })[0]");
+
+Object.defineProperty(Array.prototype, "0", { set: function () { throw false; } });
+Object.defineProperty(Array.prototype, "1", { set: function () { throw false; } });
+var arrObj = [ , false ];
+Object.defineProperty(arrObj, "0", { set: function (x) { this.set = x === 42; } });
+shouldBeTrue("arrObj[0] = 42; arrObj.set;");
+shouldBeTrue("arrObj[1] = true; arrObj[1];");
+
+successfullyParsed = true;
diff --git a/test/webkit/array-enumerators-functions-expected.txt b/test/webkit/array-enumerators-functions-expected.txt
new file mode 100644 (file)
index 0000000..0efdae4
--- /dev/null
@@ -0,0 +1,978 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the behavior of the various array enumeration functions in certain edge case scenarios
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.every.call(toUnorderedObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.forEach.call(toUnorderedObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.some.call(toUnorderedObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.filter.call(toUnorderedObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduce.call(toUnorderedObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(simpleArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(emptyArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnIndex, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(largeSparseArray), forwarders[f], returnIndex, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.map.call(toUnorderedObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(simpleArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(emptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnFalse, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeSparseArray), forwarders[f], returnFalse, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(simpleArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(emptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnTrue, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeSparseArray), forwarders[f], returnTrue, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(simpleArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(emptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeEmptyArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnElem, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeSparseArray), forwarders[f], returnElem, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(simpleArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(emptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeEmptyArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], increaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeSparseArray), forwarders[f], increaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(simpleArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(emptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeEmptyArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], decreaseLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeSparseArray), forwarders[f], decreaseLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(simpleArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(emptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeEmptyArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], halveLength, 0) is count=0;lastIndex=-1;Array.prototype.reduceRight.call(toUnorderedObject(largeSparseArray), forwarders[f], halveLength, 0)
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnFalse, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnFalse, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnElem, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnElem, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], returnIndex, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], returnIndex, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], increaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], increaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], decreaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], decreaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(simpleArray).every(forwarders[f], halveLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(emptyArray).every(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).every(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).every(forwarders[f], halveLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.every.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], decreaseLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).forEach(forwarders[f], halveLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).forEach(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).forEach(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).forEach(forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.forEach.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnTrue, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnTrue, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 1
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 1
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnElem, 0); count is 2
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 2
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 2
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnElem, 0); count is 2
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 2
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 2
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], returnIndex, 0); count is 2
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 2
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 2
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], returnIndex, 0); count is 2
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 2
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 2
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], decreaseLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).some(forwarders[f], halveLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).some(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).some(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).some(forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.some.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], decreaseLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).filter(forwarders[f], halveLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).filter(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).filter(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).filter(forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.filter.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], decreaseLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduce(forwarders[f], halveLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduce(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduce(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduce(forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduce.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).map(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).map(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).map(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], returnIndex, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).map(forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], returnIndex, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], returnIndex, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).map(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], decreaseLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).map(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).map(forwarders[f], halveLength, 0); count is 3
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).map(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).map(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).map(forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.map.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnFalse, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnFalse, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnFalse, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnTrue, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnTrue, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnTrue, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], returnElem, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], returnElem, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], returnElem, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], increaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], increaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], increaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], decreaseLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], decreaseLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], decreaseLength, 0); count is 7
+PASS count=0;lastIndex=-1;copyArray(simpleArray).reduceRight(forwarders[f], halveLength, 0); count is 4
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(simpleArray), forwarders[f], halveLength, 0); count is 6
+PASS count=0;lastIndex=-1;copyArray(emptyArray).reduceRight(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(emptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeEmptyArray).reduceRight(forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeEmptyArray), forwarders[f], halveLength, 0); count is 0
+PASS count=0;lastIndex=-1;copyArray(largeSparseArray).reduceRight(forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS count=0;lastIndex=-1;Array.prototype.reduceRight.call(toObject(largeSparseArray), forwarders[f], halveLength, 0); count is 7
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-enumerators-functions.js b/test/webkit/array-enumerators-functions.js
new file mode 100644 (file)
index 0000000..b68d2ee
--- /dev/null
@@ -0,0 +1,145 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks the behavior of the various array enumeration functions in certain edge case scenarios"
+);
+
+var functions = ["every", "forEach", "some", "filter", "reduce", "map", "reduceRight"];
+var forwarders = [
+    function(elem, index, array) { return currentFunc.call(this, elem, index, array); },
+    function(elem, index, array) { return currentFunc.call(this, elem, index, array); },
+    function(elem, index, array) { return currentFunc.call(this, elem, index, array); },
+    function(elem, index, array) { return currentFunc.call(this, elem, index, array); },
+    function(prev, elem, index, array) { return currentFunc.call(this, elem, index, array); },
+    function(elem, index, array) { return currentFunc.call(this, elem, index, array); },
+    function(prev, elem, index, array) { return currentFunc.call(this, elem, index, array); }
+];
+
+function toObject(array) {
+    var o = {};
+    for (var i in array)
+        o[i] = array[i];
+    o.length = array.length;
+    return o;
+}
+function toUnorderedObject(array) {
+    var o = {};
+    var props = [];
+    for (var i in array)
+        props.push(i);
+    for (var i = props.length - 1; i >= 0; i--)
+        o[props[i]] = array[props[i]];
+    o.length = array.length;
+    return o;
+}
+function returnFalse() { count++; return false; }
+function returnTrue() { count++; return true; }
+function returnElem(elem) { count++; return elem; }
+function returnIndex(a, index) { if (lastIndex >= index) throw "Unordered traversal"; lastIndex = index; count++; return index; }
+function increaseLength(a, b, array) { count++; array.length++; }
+function decreaseLength(a, b, array) { count++; array.length--; }
+function halveLength(a, b, array) { count++; if (!array.halved) array.length = (array.length / 2) | 0; array.halved = true; }
+
+var testFunctions = ["returnFalse", "returnTrue", "returnElem", "returnIndex", "increaseLength", "decreaseLength", "halveLength"];
+
+var simpleArray = [0,1,2,3,4,5];
+var emptyArray = [];
+var largeEmptyArray = new Array(300);
+var largeSparseArray = [0,1,2,3,4,5];
+largeSparseArray[299] = 299;
+
+var arrays = ["simpleArray", "emptyArray", "largeEmptyArray", "largeSparseArray"];
+function copyArray(a) {
+    var g = [];
+    for (var i in a)
+        g[i] = a[i];
+    return g;
+}
+
+// Test object and array behaviour matches
+for (var f = 0; f < functions.length; f++) {
+    for (var t = 0; t < testFunctions.length; t++) {
+        for (var a = 0; a < arrays.length; a++) {
+            var functionName = functions[f];
+            currentFunc = this[testFunctions[t]];
+            if (arrays[a] === "largeEmptyArray" && functionName === "map")
+                continue;
+            if (currentFunc === returnIndex && functionName === "reduceRight")
+                continue;
+            shouldBe("count=0;lastIndex=-1;copyArray("+arrays[a]+")."+functionName+"(forwarders[f], "+testFunctions[t]+", 0)",
+                     "count=0;lastIndex=-1;Array.prototype."+functionName+".call(toObject("+arrays[a]+"), forwarders[f], "+testFunctions[t]+", 0)");
+        }
+    }
+}
+
+// Test unordered object and array behaviour matches
+for (var f = 0; f < functions.length; f++) {
+    for (var t = 0; t < testFunctions.length; t++) {
+        for (var a = 0; a < arrays.length; a++) {
+            var functionName = functions[f];
+            currentFunc = this[testFunctions[t]];
+            if (arrays[a] === "largeEmptyArray" && functionName === "map")
+                continue;
+            if (currentFunc === returnIndex && functionName === "reduceRight")
+                continue;
+            shouldBe("count=0;lastIndex=-1;copyArray("+arrays[a]+")."+functionName+"(forwarders[f], "+testFunctions[t]+", 0)",
+                     "count=0;lastIndex=-1;Array.prototype."+functionName+".call(toUnorderedObject("+arrays[a]+"), forwarders[f], "+testFunctions[t]+", 0)");
+        }
+    }
+}
+
+// Test number of function calls
+var callCounts = [
+[[1,0,0,1],[6,0,0,7],[1,0,0,1],[1,0,0,1],[1,0,0,1],[1,0,0,1],[1,0,0,1]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[3,0,0,6],[3,0,0,6]],
+[[6,0,0,7],[1,0,0,1],[2,0,0,2],[2,0,0,2],[6,0,0,7],[3,0,0,6],[3,0,0,6]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[3,0,0,6],[3,0,0,6]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[3,0,0,6],[3,0,0,6]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[3,0,0,6],[3,0,0,6]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[4,0,0,7]]
+];
+var objCallCounts = [
+[[1,0,0,1],[6,0,0,7],[1,0,0,1],[1,0,0,1],[1,0,0,1],[1,0,0,1],[1,0,0,1]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7]],
+[[6,0,0,7],[1,0,0,1],[2,0,0,2],[2,0,0,2],[6,0,0,7],[6,0,0,7],[6,0,0,7]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7]],
+[[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7],[6,0,0,7]]
+];
+for (var f = 0; f < functions.length; f++) {
+    for (var t = 0; t < testFunctions.length; t++) {
+        for (var a = 0; a < arrays.length; a++) {
+            var functionName = functions[f];
+            currentFunc = this[testFunctions[t]];
+            if (currentFunc === returnIndex && functionName === "reduceRight")
+                continue;
+            var expectedCnt = "" + callCounts[f][t][a];
+            shouldBe("count=0;lastIndex=-1;copyArray("+arrays[a]+")."+functionName+"(forwarders[f], "+testFunctions[t]+", 0); count", expectedCnt);
+            var expectedCnt = "" + objCallCounts[f][t][a];
+            shouldBe("count=0;lastIndex=-1;Array.prototype."+functionName+".call(toObject("+arrays[a]+"), forwarders[f], "+testFunctions[t]+", 0); count", expectedCnt);
+            shouldBe("count=0;lastIndex=-1;Array.prototype."+functionName+".call(toObject("+arrays[a]+"), forwarders[f], "+testFunctions[t]+", 0); count", expectedCnt);
+        }
+    }
+}
diff --git a/test/webkit/array-every-expected.txt b/test/webkit/array-every-expected.txt
new file mode 100644 (file)
index 0000000..e82e0fb
--- /dev/null
@@ -0,0 +1,75 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the behavior of the every() method on Array objects.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+1.0 Single Argument Testing
+PASS [12, 5, 8, 130, 44].every(isBigEnough) is false
+PASS [12, 54, 18, 130, 44].every(isBigEnough) is true
+
+2.0 Two Argument Testing
+PASS [12, 5, 10, 130, 44].every(isBigEnough, predicate) is false
+PASS [12, 54, 18, 130, 44].every(isBigEnough, predicate) is true
+
+3.0 Array Mutation Tests
+
+3.1 Array Element Removal
+PASS [12, 5, 8, 130, 44].every(isBigEnoughAndPop) is false
+PASS [12, 54, 18, 130, 44].every(isBigEnoughAndPop) is true
+
+3.2 Array Element Changing
+PASS [12, 5, 8, 130, 44].every(isBigEnoughAndChange) is false
+PASS [12, 54, 18, 130, 44].every(isBigEnoughAndChange) is false
+
+3.3 Array Element Addition
+PASS [12, 5, 8, 130, 44].every(isBigEnoughAndPush) is false
+PASS [12, 54, 18, 130, 44].every(isBigEnoughAndPush) is false
+
+4.0 Exception Test
+PASS [12, 5, 8, 130, 44].every(isBigEnoughAndException) threw exception exception from function.
+PASS [12, 54, 18, 130, 44].every(isBigEnoughAndException) threw exception exception from function.
+
+5.0 Wrong Type for Callback Test
+PASS [12, 5, 8, 130, 44].every(5) threw exception TypeError: 5 is not a function.
+PASS [12, 5, 8, 130, 44].every('wrong') threw exception TypeError: wrong is not a function.
+PASS [12, 5, 8, 130, 44].every(new Object()) threw exception TypeError: #<Object> is not a function.
+PASS [12, 5, 8, 130, 44].every(null) threw exception TypeError: null is not a function.
+PASS [12, 5, 8, 130, 44].every(undefined) threw exception TypeError: undefined is not a function.
+PASS [12, 5, 8, 130, 44].every() threw exception TypeError: undefined is not a function.
+
+6.0 Early Exit ("Short Circuiting")
+PASS [12, 5, 8, 130, 44].every(isBigEnoughShortCircuit) is false
+PASS accumulator.toString() is [12, 5].toString()
+PASS [12, 54, 18, 130, 44].every(isBigEnoughShortCircuit) is true
+PASS accumulator.toString() is [12, 54, 18, 130, 44].toString()
+
+7.0 Behavior for Holes in Arrays
+PASS arr.every(isNotUndefined) is true
+PASS arr.every(isNotUndefined) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-every.js b/test/webkit/array-every.js
new file mode 100644 (file)
index 0000000..bbd50cb
--- /dev/null
@@ -0,0 +1,116 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks the behavior of the every() method on Array objects."
+);
+
+debug("1.0 Single Argument Testing");
+function isBigEnough(element, index, array) {
+    return (element >= 10);
+}
+shouldBeFalse("[12, 5, 8, 130, 44].every(isBigEnough)");
+shouldBeTrue("[12, 54, 18, 130, 44].every(isBigEnough)");
+debug("");
+
+debug("2.0 Two Argument Testing");
+var predicate = {
+    comparison:     11,
+    isBigEnough:    function(s) {
+                        return (s >= comparison);
+                    }
+};
+shouldBeFalse("[12, 5, 10, 130, 44].every(isBigEnough, predicate)");
+shouldBeTrue("[12, 54, 18, 130, 44].every(isBigEnough, predicate)");
+debug("");
+
+debug("3.0 Array Mutation Tests");
+debug("");
+
+debug("3.1 Array Element Removal");
+function isBigEnoughAndPop(element, index, array) {
+    array.pop();
+    return (element >= 10);
+}
+shouldBeFalse("[12, 5, 8, 130, 44].every(isBigEnoughAndPop)");
+shouldBeTrue("[12, 54, 18, 130, 44].every(isBigEnoughAndPop)");
+debug("");
+
+debug("3.2 Array Element Changing");
+function isBigEnoughAndChange(element, index, array) {
+    array[array.length-1-index]= 5;
+    return (element >= 10);
+}
+shouldBeFalse("[12, 5, 8, 130, 44].every(isBigEnoughAndChange)");
+shouldBeFalse("[12, 54, 18, 130, 44].every(isBigEnoughAndChange)");
+debug("");
+
+debug("3.3 Array Element Addition");
+function isBigEnoughAndPush(element, index, array) {
+    array.push(131);
+    return (element >= 131);
+}
+shouldBeFalse("[12, 5, 8, 130, 44].every(isBigEnoughAndPush)");
+shouldBeFalse("[12, 54, 18, 130, 44].every(isBigEnoughAndPush)");
+debug("");
+
+debug("4.0 Exception Test");
+function isBigEnoughAndException(element, index, array) {
+    if(index==1) throw "exception from function";
+    return (element >= 10);
+}
+shouldThrow("[12, 5, 8, 130, 44].every(isBigEnoughAndException)", '"exception from function"');
+shouldThrow("[12, 54, 18, 130, 44].every(isBigEnoughAndException)", '"exception from function"');
+debug("");
+
+debug("5.0 Wrong Type for Callback Test");
+shouldThrow("[12, 5, 8, 130, 44].every(5)");
+shouldThrow("[12, 5, 8, 130, 44].every('wrong')");
+shouldThrow("[12, 5, 8, 130, 44].every(new Object())");
+shouldThrow("[12, 5, 8, 130, 44].every(null)");
+shouldThrow("[12, 5, 8, 130, 44].every(undefined)");
+shouldThrow("[12, 5, 8, 130, 44].every()");
+debug("");
+
+debug('6.0 Early Exit ("Short Circuiting")');
+var accumulator = new Array();
+function isBigEnoughShortCircuit(element, index, array) {
+    accumulator.push(element);
+    return (element >= 10);
+}
+shouldBeFalse("[12, 5, 8, 130, 44].every(isBigEnoughShortCircuit)");
+shouldBe("accumulator.toString()", "[12, 5].toString()");
+accumulator.length = 0;
+shouldBeTrue("[12, 54, 18, 130, 44].every(isBigEnoughShortCircuit)");
+shouldBe("accumulator.toString()", "[12, 54, 18, 130, 44].toString()");
+debug("");
+
+debug('7.0 Behavior for Holes in Arrays');
+var arr = [5, 5, 5, 5];
+delete arr[1];
+function isNotUndefined(element, index, array) {
+    return typeof element !== "undefined";
+}
+shouldBeTrue("arr.every(isNotUndefined)");
+arr = new Array(20);
+shouldBeTrue("arr.every(isNotUndefined)");
diff --git a/test/webkit/array-filter-expected.txt b/test/webkit/array-filter-expected.txt
new file mode 100644 (file)
index 0000000..def49c6
--- /dev/null
@@ -0,0 +1,90 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests for Array.prototype.filter
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS [undefined].filter(passUndefined) is [undefined]
+PASS (new Array(20)).filter(passUndefined) is []
+PASS [0,1,2,3,4,5,6,7,8,9].filter(passEven) is [0,2,4,6,8]
+PASS [0,1,2,3,4,5,6,7,8,9].filter(passAfter5) is [5,6,7,8,9]
+PASS mixPartialAndFast.filter(passAfter5) is [5,6,7,8,9,sparseArrayLength-1]
+PASS toObject([undefined]).filter(passUndefined) is [undefined]
+PASS toObject(new Array(20)).filter(passUndefined) is []
+PASS toObject([0,1,2,3,4,5,6,7,8,9]).filter(passEven) is [0,2,4,6,8]
+PASS toObject([0,1,2,3,4,5,6,7,8,9]).filter(passAfter5) is [5,6,7,8,9]
+PASS toObject(mixPartialAndFast).filter(passAfter5) is [5,6,7,8,9,sparseArrayLength-1]
+PASS reverseInsertionOrder([undefined]).filter(passUndefined) is [undefined]
+PASS reverseInsertionOrder(new Array(20)).filter(passUndefined) is []
+PASS reverseInsertionOrder([0,1,2,3,4,5,6,7,8,9]).filter(passEven) is [0,2,4,6,8]
+PASS reverseInsertionOrder([0,1,2,3,4,5,6,7,8,9]).filter(passAfter5) is [5,6,7,8,9]
+PASS reverseInsertionOrder(mixPartialAndFast).filter(passAfter5) is [5,6,7,8,9,sparseArrayLength-1]
+,0,[object Object]
+PASS reverseInsertionOrder([undefined]).filter(filterLog(passUndefined)) is [undefined]
+PASS reverseInsertionOrder(new Array(20)).filter(filterLog(passUndefined)) is []
+0,0,[object Object]
+1,1,[object Object]
+2,2,[object Object]
+3,3,[object Object]
+4,4,[object Object]
+PASS reverseInsertionOrder([0,1,2,3,4]).filter(filterLog(passEven)) is [0,2,4]
+0,0,[object Object]
+1,1,[object Object]
+2,2,[object Object]
+3,3,[object Object]
+4,4,[object Object]
+5,5,[object Object]
+6,6,[object Object]
+7,7,[object Object]
+8,8,[object Object]
+9,9,[object Object]
+10099,10099,[object Object]
+PASS reverseInsertionOrder(mixPartialAndFast).filter(filterLog(passAfter5)) is [5,6,7,8,9,sparseArrayLength-1]
+,0,
+PASS ([undefined]).filter(filterLog(passUndefined)) is [undefined]
+PASS (new Array(20)).filter(filterLog(passUndefined)) is []
+0,0,0,1,2,3,4
+1,1,0,1,2,3,4
+2,2,0,1,2,3,4
+3,3,0,1,2,3,4
+4,4,0,1,2,3,4
+PASS ([0,1,2,3,4]).filter(filterLog(passEven)) is [0,2,4]
+0,0,0,1,2,3,4,5,6,7,8,9,
+1,1,0,1,2,3,4,5,6,7,8,9,
+2,2,0,1,2,3,4,5,6,7,8,9,
+3,3,0,1,2,3,4,5,6,7,8,9,
+4,4,0,1,2,3,4,5,6,7,8,9,
+5,5,0,1,2,3,4,5,6,7,8,9,
+6,6,0,1,2,3,4,5,6,7,8,9,
+7,7,0,1,2,3,4,5,6,7,8,9,
+8,8,0,1,2,3,4,5,6,7,8,9,
+9,9,0,1,2,3,4,5,6,7,8,9,
+10099,10099,0,1,2,3,4,5,6,7,8,9,
+PASS (mixPartialAndFast).filter(filterLog(passAfter5)) is [5,6,7,8,9,sparseArrayLength-1]
+PASS [1,2,3].filter(function(i,j,k,l,m){ return m=!m; }) is [1,2,3]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-filter.js b/test/webkit/array-filter.js
new file mode 100644 (file)
index 0000000..d0640c2
--- /dev/null
@@ -0,0 +1,100 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Tests for Array.prototype.filter");
+
+function passUndefined(element, index, array) {
+    return typeof element === "undefined";
+}
+function passEven(a) {
+    return !(a & 1);
+}
+function passAfter5(element, index) {
+    return index >= 5;
+}
+var sparseArrayLength = 10100;
+mixPartialAndFast = new Array(sparseArrayLength);
+mixPartialAndFast[sparseArrayLength - 1] = sparseArrayLength - 1;
+for(var i = 0; i < 10; i++)
+    mixPartialAndFast[i] = i;
+function toObject(array) {
+    var result = {};
+    result.length = array.length;
+    for (var i in array)
+        result[i] = array[i];
+    result.filter=Array.prototype.filter;
+    return result;
+}
+function reverseInsertionOrder(array) {
+    var obj = toObject(array);
+    var props = [];
+    for (var i in obj)
+        props.push(i);
+    var result = {};
+    for (var i = props.length - 1; i >= 0; i--)
+        result[props[i]] = obj[props[i]];
+    result.filter=Array.prototype.filter;
+    return result;
+}
+function filterLog(f) {
+    return function(i,j) {
+        try {
+        debug([i,j,arguments[2].toString().substring(0,20)].toString());
+        return f.apply(this, arguments);
+        } catch(e) {
+            console.error(e);
+        }
+    }
+}
+
+shouldBe("[undefined].filter(passUndefined)", "[undefined]");
+shouldBe("(new Array(20)).filter(passUndefined)", "[]");
+shouldBe("[0,1,2,3,4,5,6,7,8,9].filter(passEven)", "[0,2,4,6,8]");
+shouldBe("[0,1,2,3,4,5,6,7,8,9].filter(passAfter5)", "[5,6,7,8,9]");
+shouldBe("mixPartialAndFast.filter(passAfter5)", "[5,6,7,8,9,sparseArrayLength-1]");
+
+// Generic Object
+shouldBe("toObject([undefined]).filter(passUndefined)", "[undefined]");
+shouldBe("toObject(new Array(20)).filter(passUndefined)", "[]");
+shouldBe("toObject([0,1,2,3,4,5,6,7,8,9]).filter(passEven)", "[0,2,4,6,8]");
+shouldBe("toObject([0,1,2,3,4,5,6,7,8,9]).filter(passAfter5)", "[5,6,7,8,9]");
+shouldBe("toObject(mixPartialAndFast).filter(passAfter5)", "[5,6,7,8,9,sparseArrayLength-1]");
+
+// Reversed generic Object
+shouldBe("reverseInsertionOrder([undefined]).filter(passUndefined)", "[undefined]");
+shouldBe("reverseInsertionOrder(new Array(20)).filter(passUndefined)", "[]");
+shouldBe("reverseInsertionOrder([0,1,2,3,4,5,6,7,8,9]).filter(passEven)", "[0,2,4,6,8]");
+shouldBe("reverseInsertionOrder([0,1,2,3,4,5,6,7,8,9]).filter(passAfter5)", "[5,6,7,8,9]");
+shouldBe("reverseInsertionOrder(mixPartialAndFast).filter(passAfter5)", "[5,6,7,8,9,sparseArrayLength-1]");
+
+// Log evaluation order
+shouldBe("reverseInsertionOrder([undefined]).filter(filterLog(passUndefined))", "[undefined]");
+shouldBe("reverseInsertionOrder(new Array(20)).filter(filterLog(passUndefined))", "[]");
+shouldBe("reverseInsertionOrder([0,1,2,3,4]).filter(filterLog(passEven))", "[0,2,4]");
+shouldBe("reverseInsertionOrder(mixPartialAndFast).filter(filterLog(passAfter5))", "[5,6,7,8,9,sparseArrayLength-1]");
+shouldBe("([undefined]).filter(filterLog(passUndefined))", "[undefined]");
+shouldBe("(new Array(20)).filter(filterLog(passUndefined))", "[]");
+shouldBe("([0,1,2,3,4]).filter(filterLog(passEven))", "[0,2,4]");
+shouldBe("(mixPartialAndFast).filter(filterLog(passAfter5))", "[5,6,7,8,9,sparseArrayLength-1]");
+
+shouldBe("[1,2,3].filter(function(i,j,k,l,m){ return m=!m; })", "[1,2,3]")
diff --git a/test/webkit/array-holes-expected.txt b/test/webkit/array-holes-expected.txt
new file mode 100644 (file)
index 0000000..05e095f
--- /dev/null
@@ -0,0 +1,85 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that arrays have holes that you can see the prototype through, not just missing values.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS var a = []; a.length = 1; showHoles(a) is '[hole]'
+PASS var a = []; a[0] = undefined; showHoles(a) is '[undefined]'
+PASS var a = []; a[0] = undefined; delete a[0]; showHoles(a) is '[hole]'
+PASS showHoles([0, , 2]) is '[0, hole, 2]'
+PASS showHoles([0, 1, ,]) is '[0, 1, hole]'
+PASS showHoles([0, , 2].concat([3, , 5])) is '[0, hole, 2, 3, hole, 5]'
+PASS showHoles([0, , 2, 3].reverse()) is '[3, 2, hole, 0]'
+PASS a = [0, , 2, 3]; a.shift(); showHoles(a) is '[hole, 2, 3]'
+PASS showHoles([0, , 2, 3].slice(0, 3)) is '[0, hole, 2]'
+PASS showHoles([0, , 2, 3].sort()) is '[0, 2, 3, hole]'
+PASS showHoles([0, undefined, 2, 3].sort()) is '[0, 2, 3, undefined]'
+PASS a = [0, , 2, 3]; a.splice(2, 3, 5, 6); showHoles(a) is '[0, hole, 5, 6]'
+PASS a = [0, , 2, 3]; a.unshift(4); showHoles(a) is '[4, 0, hole, 2, 3]'
+PASS showHoles([0, , 2, 3].filter(returnTrue)) is '[0, 2, 3]'
+PASS showHoles([0, undefined, 2, 3].filter(returnTrue)) is '[0, undefined, 2, 3]'
+PASS showHoles([0, , 2, 3].map(returnTrue)) is '[true, hole, true, true]'
+PASS showHoles([0, undefined, 2, 3].map(returnTrue)) is '[true, true, true, true]'
+PASS a = []; [0, , 2, 3].every(addToArrayReturnTrue); showHoles(a) is '[0, 2, 3]'
+PASS a = []; [0, undefined, 2, 3].every(addToArrayReturnTrue); showHoles(a) is '[0, undefined, 2, 3]'
+PASS a = []; [0, , 2, 3].forEach(addToArray); showHoles(a) is '[0, 2, 3]'
+PASS a = []; [0, undefined, 2, 3].forEach(addToArray); showHoles(a) is '[0, undefined, 2, 3]'
+PASS a = []; [0, , 2, 3].some(addToArrayReturnFalse); showHoles(a) is '[0, 2, 3]'
+PASS a = []; [0, undefined, 2, 3].some(addToArrayReturnFalse); showHoles(a) is '[0, undefined, 2, 3]'
+PASS [0, , 2, 3].indexOf() is -1
+PASS [0, undefined, 2, 3].indexOf() is 1
+PASS [0, , 2, 3].lastIndexOf() is -1
+PASS [0, undefined, 2, 3].lastIndexOf() is 1
+PASS showHoles([0, , 2]) is '[0, hole, 2]'
+PASS showHoles([0, 1, ,]) is '[0, 1, hole]'
+PASS showHoles([0, , 2].concat([3, , 5])) is '[0, peekaboo, 2, 3, peekaboo, 5]'
+PASS showHoles([0, , 2, 3].reverse()) is '[3, 2, peekaboo, 0]'
+PASS a = [0, , 2, 3]; a.shift(); showHoles(a) is '[peekaboo, 2, 3]'
+PASS showHoles([0, , 2, 3].slice(0, 3)) is '[0, peekaboo, 2]'
+PASS showHoles([0, , 2, 3].sort()) is '[0, 2, 3, hole]'
+PASS showHoles([0, undefined, 2, 3].sort()) is '[0, 2, 3, undefined]'
+PASS a = [0, , 2, 3]; a.splice(2, 3, 5, 6); showHoles(a) is '[0, hole, 5, 6]'
+PASS a = [0, , 2, 3]; a.unshift(4); showHoles(a) is '[4, 0, peekaboo, 2, 3]'
+PASS showHoles([0, , 2, 3].filter(returnTrue)) is '[0, peekaboo, 2, 3]'
+PASS showHoles([0, undefined, 2, 3].filter(returnTrue)) is '[0, undefined, 2, 3]'
+PASS showHoles([0, , 2, 3].map(returnTrue)) is '[true, true, true, true]'
+PASS showHoles([0, undefined, 2, 3].map(returnTrue)) is '[true, true, true, true]'
+PASS a = []; [0, , 2, 3].every(addToArrayReturnTrue); showHoles(a) is '[0, peekaboo, 2, 3]'
+PASS a = []; [0, undefined, 2, 3].every(addToArrayReturnTrue); showHoles(a) is '[0, undefined, 2, 3]'
+PASS a = []; [0, , 2, 3].forEach(addToArray); showHoles(a) is '[0, peekaboo, 2, 3]'
+PASS a = []; [0, undefined, 2, 3].forEach(addToArray); showHoles(a) is '[0, undefined, 2, 3]'
+PASS a = []; [0, , 2, 3].some(addToArrayReturnFalse); showHoles(a) is '[0, peekaboo, 2, 3]'
+PASS a = []; [0, undefined, 2, 3].some(addToArrayReturnFalse); showHoles(a) is '[0, undefined, 2, 3]'
+PASS [0, , 2, 3].indexOf() is -1
+PASS [0, , 2, 3].indexOf('peekaboo') is 1
+PASS [0, undefined, 2, 3].indexOf() is 1
+PASS [0, , 2, 3].lastIndexOf() is -1
+PASS [0, , 2, 3].lastIndexOf('peekaboo') is 1
+PASS [0, undefined, 2, 3].lastIndexOf() is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-holes.js b/test/webkit/array-holes.js
new file mode 100644 (file)
index 0000000..007626b
--- /dev/null
@@ -0,0 +1,134 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This tests that arrays have holes that you can see the prototype through, not just missing values.");
+
+function isHole(array, index)
+{
+    if (index >= array.length)
+        return "bad index: past length";
+    // Check if we can see through the hole into another room.
+    Array.prototype[index] = "room";
+    var isHole = array[index] == "room";
+    delete Array.prototype[index];
+    return isHole;
+}
+
+function showHoles(array)
+{
+    var string = "[";
+    for (i = 0; i < array.length; ++i) {
+        if (i)
+            string += ", ";
+        if (isHole(array, i))
+            string += "hole";
+        else
+            string += array[i];
+    }
+    string += "]";
+    return string;
+}
+
+function returnTrue()
+{
+    return true;
+}
+
+var a;
+
+function addToArray(arg)
+{
+    a.push(arg);
+}
+
+function addToArrayReturnFalse(arg)
+{
+    a.push(arg);
+    return false;
+}
+
+function addToArrayReturnTrue(arg)
+{
+    a.push(arg);
+    return true;
+}
+
+shouldBe("var a = []; a.length = 1; showHoles(a)", "'[hole]'");
+shouldBe("var a = []; a[0] = undefined; showHoles(a)", "'[undefined]'");
+shouldBe("var a = []; a[0] = undefined; delete a[0]; showHoles(a)", "'[hole]'");
+
+shouldBe("showHoles([0, , 2])", "'[0, hole, 2]'");
+shouldBe("showHoles([0, 1, ,])", "'[0, 1, hole]'");
+shouldBe("showHoles([0, , 2].concat([3, , 5]))", "'[0, hole, 2, 3, hole, 5]'");
+shouldBe("showHoles([0, , 2, 3].reverse())", "'[3, 2, hole, 0]'");
+shouldBe("a = [0, , 2, 3]; a.shift(); showHoles(a)", "'[hole, 2, 3]'");
+shouldBe("showHoles([0, , 2, 3].slice(0, 3))", "'[0, hole, 2]'");
+shouldBe("showHoles([0, , 2, 3].sort())", "'[0, 2, 3, hole]'");
+shouldBe("showHoles([0, undefined, 2, 3].sort())", "'[0, 2, 3, undefined]'");
+shouldBe("a = [0, , 2, 3]; a.splice(2, 3, 5, 6); showHoles(a)", "'[0, hole, 5, 6]'");
+shouldBe("a = [0, , 2, 3]; a.unshift(4); showHoles(a)", "'[4, 0, hole, 2, 3]'");
+shouldBe("showHoles([0, , 2, 3].filter(returnTrue))", "'[0, 2, 3]'");
+shouldBe("showHoles([0, undefined, 2, 3].filter(returnTrue))", "'[0, undefined, 2, 3]'");
+shouldBe("showHoles([0, , 2, 3].map(returnTrue))", "'[true, hole, true, true]'");
+shouldBe("showHoles([0, undefined, 2, 3].map(returnTrue))", "'[true, true, true, true]'");
+shouldBe("a = []; [0, , 2, 3].every(addToArrayReturnTrue); showHoles(a)", "'[0, 2, 3]'");
+shouldBe("a = []; [0, undefined, 2, 3].every(addToArrayReturnTrue); showHoles(a)", "'[0, undefined, 2, 3]'");
+shouldBe("a = []; [0, , 2, 3].forEach(addToArray); showHoles(a)", "'[0, 2, 3]'");
+shouldBe("a = []; [0, undefined, 2, 3].forEach(addToArray); showHoles(a)", "'[0, undefined, 2, 3]'");
+shouldBe("a = []; [0, , 2, 3].some(addToArrayReturnFalse); showHoles(a)", "'[0, 2, 3]'");
+shouldBe("a = []; [0, undefined, 2, 3].some(addToArrayReturnFalse); showHoles(a)", "'[0, undefined, 2, 3]'");
+shouldBe("[0, , 2, 3].indexOf()", "-1");
+shouldBe("[0, undefined, 2, 3].indexOf()", "1");
+shouldBe("[0, , 2, 3].lastIndexOf()", "-1");
+shouldBe("[0, undefined, 2, 3].lastIndexOf()", "1");
+
+Object.prototype[1] = "peekaboo";
+
+shouldBe("showHoles([0, , 2])", "'[0, hole, 2]'");
+shouldBe("showHoles([0, 1, ,])", "'[0, 1, hole]'");
+shouldBe("showHoles([0, , 2].concat([3, , 5]))", "'[0, peekaboo, 2, 3, peekaboo, 5]'");
+shouldBe("showHoles([0, , 2, 3].reverse())", "'[3, 2, peekaboo, 0]'");
+shouldBe("a = [0, , 2, 3]; a.shift(); showHoles(a)", "'[peekaboo, 2, 3]'");
+shouldBe("showHoles([0, , 2, 3].slice(0, 3))", "'[0, peekaboo, 2]'");
+shouldBe("showHoles([0, , 2, 3].sort())", "'[0, 2, 3, hole]'");
+shouldBe("showHoles([0, undefined, 2, 3].sort())", "'[0, 2, 3, undefined]'");
+shouldBe("a = [0, , 2, 3]; a.splice(2, 3, 5, 6); showHoles(a)", "'[0, hole, 5, 6]'");
+shouldBe("a = [0, , 2, 3]; a.unshift(4); showHoles(a)", "'[4, 0, peekaboo, 2, 3]'");
+shouldBe("showHoles([0, , 2, 3].filter(returnTrue))", "'[0, peekaboo, 2, 3]'");
+shouldBe("showHoles([0, undefined, 2, 3].filter(returnTrue))", "'[0, undefined, 2, 3]'");
+shouldBe("showHoles([0, , 2, 3].map(returnTrue))", "'[true, true, true, true]'");
+shouldBe("showHoles([0, undefined, 2, 3].map(returnTrue))", "'[true, true, true, true]'");
+shouldBe("a = []; [0, , 2, 3].every(addToArrayReturnTrue); showHoles(a)", "'[0, peekaboo, 2, 3]'");
+shouldBe("a = []; [0, undefined, 2, 3].every(addToArrayReturnTrue); showHoles(a)", "'[0, undefined, 2, 3]'");
+shouldBe("a = []; [0, , 2, 3].forEach(addToArray); showHoles(a)", "'[0, peekaboo, 2, 3]'");
+shouldBe("a = []; [0, undefined, 2, 3].forEach(addToArray); showHoles(a)", "'[0, undefined, 2, 3]'");
+shouldBe("a = []; [0, , 2, 3].some(addToArrayReturnFalse); showHoles(a)", "'[0, peekaboo, 2, 3]'");
+shouldBe("a = []; [0, undefined, 2, 3].some(addToArrayReturnFalse); showHoles(a)", "'[0, undefined, 2, 3]'");
+shouldBe("[0, , 2, 3].indexOf()", "-1");
+shouldBe("[0, , 2, 3].indexOf('peekaboo')", "1");
+shouldBe("[0, undefined, 2, 3].indexOf()", "1");
+shouldBe("[0, , 2, 3].lastIndexOf()", "-1");
+shouldBe("[0, , 2, 3].lastIndexOf('peekaboo')", "1");
+shouldBe("[0, undefined, 2, 3].lastIndexOf()", "1");
+
+delete Object.prototype[1];
diff --git a/test/webkit/array-index-immediate-types-expected.txt b/test/webkit/array-index-immediate-types-expected.txt
new file mode 100644 (file)
index 0000000..0f74e19
--- /dev/null
@@ -0,0 +1,39 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the behaviour of indexing an Array with immediate types.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS array[0] is "Zero"
+PASS array[null] is undefined
+PASS array[undefined] is undefined
+PASS array[true] is undefined
+PASS array[false] is undefined
+PASS putSelf([0], 0); is true
+PASS putSelf([0], 1/9); is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-index-immediate-types.js b/test/webkit/array-index-immediate-types.js
new file mode 100644 (file)
index 0000000..7bacc9d
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks the behaviour of indexing an Array with immediate types."
+);
+
+var array = ["Zero", "One"];
+
+shouldBe("array[0]", '"Zero"');
+shouldBe("array[null]", "undefined");
+shouldBe("array[undefined]", "undefined");
+shouldBe("array[true]", "undefined");
+shouldBe("array[false]", "undefined");
+
+function putSelf(array, index)
+{
+    index = index << 0;
+    array[index] = index;
+    return true;
+}
+
+shouldBeTrue("putSelf([0], 0);");
+shouldBeTrue("putSelf([0], 1/9);");
diff --git a/test/webkit/array-indexing-expected.txt b/test/webkit/array-indexing-expected.txt
new file mode 100644 (file)
index 0000000..4ddc498
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that array accessing doesn't do the wrong thing for negative indices
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS a.length is 0
+PASS a["-5"] is a[-5]
+PASS a[4] is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-indexing.js b/test/webkit/array-indexing.js
new file mode 100644 (file)
index 0000000..d4e751b
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that array accessing doesn't do the wrong thing for negative indices"
+);
+var a = [];
+a[-5] =  true;
+shouldBe('a.length', '0');
+shouldBe('a["-5"]', 'a[-5]');
+
+// Just some bounds paranoia
+a = [1,2,3,4];
+shouldBe('a[4]', 'undefined');
+
+a = [];
+for (var i = 0; i > -1000; i--) a[i] = i;
diff --git a/test/webkit/array-iterate-backwards-expected.txt b/test/webkit/array-iterate-backwards-expected.txt
new file mode 100644 (file)
index 0000000..7db2f99
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that iterating a large array backwards works correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS verify(32768) is true
+PASS verify(65536) is true
+PASS verify(120000) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-iterate-backwards.js b/test/webkit/array-iterate-backwards.js
new file mode 100644 (file)
index 0000000..301cbd5
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that iterating a large array backwards works correctly."
+);
+
+var bytes = new Array();
+
+function prepare(nbytes) {
+    var i = nbytes - 1;
+    while (i >= 0) {
+        bytes[i] = new Number(i);
+        i -= 1;
+    }
+}
+
+function verify(nbytes) {
+    var i = nbytes - 1;
+    while (i >= 0) {
+        if (bytes[i] != i)
+            return false;
+        i -= 1;
+    }
+    return true;
+}
+
+prepare(32768);
+shouldBeTrue('verify(32768)');
+
+prepare(65536);
+shouldBeTrue('verify(65536)');
+
+prepare(120000);
+shouldBeTrue('verify(120000)');
diff --git a/test/webkit/array-lastIndexOf-expected.txt b/test/webkit/array-lastIndexOf-expected.txt
new file mode 100644 (file)
index 0000000..0db9ba7
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks lastIndexOf for various values in an array
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS lastIndex is -1
+PASS lastIndex is 2
+PASS lastIndex is 3
+PASS lastIndex is -1
+PASS lastIndex is 3
+PASS lastIndex is 0
+PASS lastIndex is 0
+PASS lastIndex is 3
+PASS lastIndex is -1
+PASS lastIndex is -1
+PASS lastIndex is -1
+PASS lastIndex is 19
+PASS lastIndex is -1
+PASS lastIndex is -1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-lastIndexOf.js b/test/webkit/array-lastIndexOf.js
new file mode 100644 (file)
index 0000000..adc593e
--- /dev/null
@@ -0,0 +1,75 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test checks lastIndexOf for various values in an array'
+);
+
+
+var testArray = [2, 5, 9, 2];
+var lastIndex = 0;
+
+lastIndex = testArray.lastIndexOf(2,-500);
+shouldBe('lastIndex', '-1');
+lastIndex = testArray.lastIndexOf(9,500);
+shouldBe('lastIndex', '2');
+lastIndex = testArray.lastIndexOf(2);
+shouldBe('lastIndex', '3');
+lastIndex = testArray.lastIndexOf(7);
+shouldBe('lastIndex', '-1');
+lastIndex = testArray.lastIndexOf(2, 3);
+shouldBe('lastIndex', '3');
+lastIndex = testArray.lastIndexOf(2, 2);
+shouldBe('lastIndex', '0');
+lastIndex = testArray.lastIndexOf(2, -2);
+shouldBe('lastIndex', '0');
+lastIndex = testArray.lastIndexOf(2, -1);
+shouldBe('lastIndex', '3');
+
+delete testArray[1];
+
+lastIndex = testArray.lastIndexOf(undefined);
+shouldBe('lastIndex', '-1');
+
+delete testArray[3];
+
+lastIndex = testArray.lastIndexOf(undefined);
+shouldBe('lastIndex', '-1');
+
+testArray = new Array(20);
+
+lastIndex = testArray.lastIndexOf(undefined);
+shouldBe('lastIndex', '-1');
+
+testArray[19] = undefined;
+
+lastIndex = testArray.lastIndexOf(undefined);
+shouldBe('lastIndex', '19');
+
+lastIndex = testArray.lastIndexOf(undefined, 18);
+shouldBe('lastIndex', '-1');
+
+delete testArray[19];
+
+lastIndex = testArray.lastIndexOf(undefined);
+shouldBe('lastIndex', '-1');
diff --git a/test/webkit/array-proto-func-length-getter-except-expected.txt b/test/webkit/array-proto-func-length-getter-except-expected.txt
new file mode 100644 (file)
index 0000000..95912e8
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that functions on the array prototype correctly handle exceptions from length getters when called on non-array objects.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test(Array.prototype.join) is true
+PASS test(Array.prototype.pop) is true
+PASS test(Array.prototype.push) is true
+PASS test(Array.prototype.reverse) is true
+PASS test(Array.prototype.shift) is true
+PASS test(Array.prototype.slice) is true
+PASS test(Array.prototype.sort) is true
+PASS test(Array.prototype.splice) is true
+PASS test(Array.prototype.unshift) is true
+PASS test(Array.prototype.indexOf) is true
+PASS test(Array.prototype.lastIndexOf) is true
+PASS test(Array.prototype.every) is true
+PASS test(Array.prototype.some) is true
+PASS test(Array.prototype.forEach) is true
+PASS test(Array.prototype.map) is true
+PASS test(Array.prototype.filter) is true
+PASS test(Array.prototype.reduce) is true
+PASS test(Array.prototype.reduceRight) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-proto-func-length-getter-except.js b/test/webkit/array-proto-func-length-getter-except.js
new file mode 100644 (file)
index 0000000..6584795
--- /dev/null
@@ -0,0 +1,64 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that functions on the array prototype correctly handle exceptions from length getters when called on non-array objects."
+);
+
+var testObj = {
+    0: "a",
+    1: "b",
+    2: "c"
+};
+var lengthGetter = {
+    get: (function() { throw true; })
+}
+Object.defineProperty(testObj, "length", lengthGetter);
+
+function test(f) {
+    try {
+        f.call(testObj, undefined);
+        return false;
+    } catch (e) {
+        return e === true;
+    }
+}
+
+shouldBeTrue("test(Array.prototype.join)");
+shouldBeTrue("test(Array.prototype.pop)");
+shouldBeTrue("test(Array.prototype.push)");
+shouldBeTrue("test(Array.prototype.reverse)");
+shouldBeTrue("test(Array.prototype.shift)");
+shouldBeTrue("test(Array.prototype.slice)");
+shouldBeTrue("test(Array.prototype.sort)");
+shouldBeTrue("test(Array.prototype.splice)");
+shouldBeTrue("test(Array.prototype.unshift)");
+shouldBeTrue("test(Array.prototype.indexOf)");
+shouldBeTrue("test(Array.prototype.lastIndexOf)");
+shouldBeTrue("test(Array.prototype.every)");
+shouldBeTrue("test(Array.prototype.some)");
+shouldBeTrue("test(Array.prototype.forEach)");
+shouldBeTrue("test(Array.prototype.map)");
+shouldBeTrue("test(Array.prototype.filter)");
+shouldBeTrue("test(Array.prototype.reduce)");
+shouldBeTrue("test(Array.prototype.reduceRight)");
diff --git a/test/webkit/array-proto-func-property-getter-except-expected.txt b/test/webkit/array-proto-func-property-getter-except-expected.txt
new file mode 100644 (file)
index 0000000..05dfb6f
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that functions on the array prototype correctly handle exceptions from property getters when called on non-array objects.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test(Array.prototype.sort) is true
+PASS test(Array.prototype.every) is true
+PASS test(Array.prototype.some) is true
+PASS test(Array.prototype.forEach) is true
+PASS test(Array.prototype.map) is true
+PASS test(Array.prototype.filter) is true
+PASS test(Array.prototype.reduce) is true
+PASS test(Array.prototype.reduceRight) is true
+PASS test(Array.prototype.join) is true
+PASS test(Array.prototype.pop) is true
+PASS test(Array.prototype.push) is false
+PASS test(Array.prototype.reverse) is true
+PASS test(Array.prototype.shift) is true
+PASS test(Array.prototype.slice) is true
+PASS test(Array.prototype.splice) is true
+PASS test(Array.prototype.unshift) is true
+PASS test(Array.prototype.indexOf) is true
+PASS test(Array.prototype.lastIndexOf) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-proto-func-property-getter-except.js b/test/webkit/array-proto-func-property-getter-except.js
new file mode 100644 (file)
index 0000000..82b70b2
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that functions on the array prototype correctly handle exceptions from property getters when called on non-array objects."
+);
+
+function test(f) {
+
+    var testObj = {
+        length: 3
+    };
+    var propertyGetter = {
+        get: (function() { throw true; })
+    }
+    Object.defineProperty(testObj, 0, propertyGetter);
+    Object.defineProperty(testObj, 1, propertyGetter);
+    Object.defineProperty(testObj, 2, propertyGetter);
+
+    try {
+        f.call(testObj, function(){});
+        return false;
+    } catch (e) {
+        return e === true;
+    }
+}
+
+// This test makes sense for these functions: (they should get all properties on the array)
+shouldBeTrue("test(Array.prototype.sort)");
+shouldBeTrue("test(Array.prototype.every)");
+shouldBeTrue("test(Array.prototype.some)");
+shouldBeTrue("test(Array.prototype.forEach)");
+shouldBeTrue("test(Array.prototype.map)");
+shouldBeTrue("test(Array.prototype.filter)");
+shouldBeTrue("test(Array.prototype.reduce)");
+shouldBeTrue("test(Array.prototype.reduceRight)");
+
+// Probably not testing much of anything in these cases, but make sure they don't crash!
+shouldBeTrue("test(Array.prototype.join)");
+shouldBeTrue("test(Array.prototype.pop)");
+shouldBeFalse("test(Array.prototype.push)");
+shouldBeTrue("test(Array.prototype.reverse)");
+shouldBeTrue("test(Array.prototype.shift)");
+shouldBeTrue("test(Array.prototype.slice)");
+shouldBeTrue("test(Array.prototype.splice)");
+shouldBeTrue("test(Array.prototype.unshift)");
+shouldBeTrue("test(Array.prototype.indexOf)");
+shouldBeTrue("test(Array.prototype.lastIndexOf)");
diff --git a/test/webkit/array-reduce-expected.txt b/test/webkit/array-reduce-expected.txt
new file mode 100644 (file)
index 0000000..4fa6083
--- /dev/null
@@ -0,0 +1,63 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the behavior of the reduce() method on a number of objects.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS [0,1,2,3].reduce(function(a,b){ return a + b; }) is 6
+PASS [1,2,3].reduce(function(a,b){ return a + b; }) is 6
+PASS [0,1,2,3].reduce(function(a,b){ return a + b; }, 4) is 10
+PASS [1,2,3].reduce(function(a,b){ return a + b; }, 4) is 10
+PASS toObject([0,1,2,3]).reduce(function(a,b){ return a + b; }) is 6
+PASS toObject([1,2,3]).reduce(function(a,b){ return a + b; }) is 6
+PASS toObject([0,1,2,3]).reduce(function(a,b){ return a + b; }, 4) is 10
+PASS toObject([1,2,3]).reduce(function(a,b){ return a + b; }, 4) is 10
+PASS toUnorderedObject([0,1,2,3]).reduce(function(a,b){ return a + b; }) is 6
+PASS toUnorderedObject([1,2,3]).reduce(function(a,b){ return a + b; }) is 6
+PASS toUnorderedObject([0,1,2,3]).reduce(function(a,b){ return a + b; }, 4) is 10
+PASS toUnorderedObject([1,2,3]).reduce(function(a,b){ return a + b; }, 4) is 10
+PASS sparseArray.reduce(function(a,b){ return a + b; }, 0) is 10
+PASS toObject(sparseArray).reduce(function(a,b){ return a + b; }, 0) is 10
+PASS sparseArray.reduce(function(a,b){ callCount++; }); callCount is 0
+PASS toObject(sparseArray).reduce(function(a,b){ callCount++; }); callCount is 0
+PASS sparseArray.reduce(function(a,b){ callCount++; }, 0); callCount is 1
+PASS toObject(sparseArray).reduce(function(a,b){ callCount++; }, 0); callCount is 1
+PASS [0,1,2,3,4].reduce(function(a,b){ callCount++; }, 0); callCount is 5
+PASS [0,1,2,3,4].reduce(function(a,b){ callCount++; }); callCount is 4
+PASS [1, 2, 3, 4].reduce(function(a,b, i, thisObj){ thisObj.length--; callCount++; return a + b; }, 0); callCount is 2
+PASS [1, 2, 3, 4].reduce(function(a,b, i, thisObj){ thisObj.length++; callCount++; return a + b; }, 0); callCount is 4
+PASS toObject([1, 2, 3, 4]).reduce(function(a,b, i, thisObj){ thisObj.length--; callCount++; return a + b; }, 0); callCount is 4
+PASS toObject([1, 2, 3, 4]).reduce(function(a,b, i, thisObj){ thisObj.length++; callCount++; return a + b; }, 0); callCount is 4
+PASS [[0,1], [2,3], [4,5]].reduce(function(a,b) {return a.concat(b);}, []) is [0,1,2,3,4,5]
+PASS toObject([[0,1], [2,3], [4,5]]).reduce(function(a,b) {return a.concat(b);}, []) is [0,1,2,3,4,5]
+PASS toObject([0,1,2,3,4,5]).reduce(function(a,b,i) {return a.concat([i,b]);}, []) is [0,0,1,1,2,2,3,3,4,4,5,5]
+PASS toUnorderedObject([[0,1], [2,3], [4,5]]).reduce(function(a,b) {return a.concat(b);}, []) is [0,1,2,3,4,5]
+PASS toUnorderedObject([0,1,2,3,4,5]).reduce(function(a,b,i) {return a.concat([i,b]);}, []) is [0,0,1,1,2,2,3,3,4,4,5,5]
+PASS [0,1,2,3,4,5].reduce(function(a,b,i) {return a.concat([i,b]);}, []) is [0,0,1,1,2,2,3,3,4,4,5,5]
+PASS [2,3].reduce(function() {'use strict'; return this;}) is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-reduce.js b/test/webkit/array-reduce.js
new file mode 100644 (file)
index 0000000..ff6457a
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks the behavior of the reduce() method on a number of objects."
+);
+
+function toObject(array) {
+    var o = {};
+    for (var i in array)
+        o[i] = array[i];
+    o.length = array.length;
+    o.reduce = Array.prototype.reduce;
+    return o;
+}
+function toUnorderedObject(array) {
+    var o = {};
+    var props = [];
+    for (var i in array)
+        props.push(i);
+    for (var i = props.length - 1; i >= 0; i--)
+        o[props[i]] = array[props[i]];
+    o.length = array.length;
+    o.reduce = Array.prototype.reduce;
+    return o;
+}
+
+shouldBe("[0,1,2,3].reduce(function(a,b){ return a + b; })", "6");
+shouldBe("[1,2,3].reduce(function(a,b){ return a + b; })", "6");
+shouldBe("[0,1,2,3].reduce(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("[1,2,3].reduce(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("toObject([0,1,2,3]).reduce(function(a,b){ return a + b; })", "6");
+shouldBe("toObject([1,2,3]).reduce(function(a,b){ return a + b; })", "6");
+shouldBe("toObject([0,1,2,3]).reduce(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("toObject([1,2,3]).reduce(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("toUnorderedObject([0,1,2,3]).reduce(function(a,b){ return a + b; })", "6");
+shouldBe("toUnorderedObject([1,2,3]).reduce(function(a,b){ return a + b; })", "6");
+shouldBe("toUnorderedObject([0,1,2,3]).reduce(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("toUnorderedObject([1,2,3]).reduce(function(a,b){ return a + b; }, 4)", "10");
+sparseArray = [];
+sparseArray[10] = 10;
+shouldBe("sparseArray.reduce(function(a,b){ return a + b; }, 0)", "10");
+shouldBe("toObject(sparseArray).reduce(function(a,b){ return a + b; }, 0)", "10");
+var callCount = 0;
+shouldBe("sparseArray.reduce(function(a,b){ callCount++; }); callCount", "0");
+callCount = 0;
+shouldBe("toObject(sparseArray).reduce(function(a,b){ callCount++; }); callCount", "0");
+var callCount = 0;
+shouldBe("sparseArray.reduce(function(a,b){ callCount++; }, 0); callCount", "1");
+callCount = 0;
+shouldBe("toObject(sparseArray).reduce(function(a,b){ callCount++; }, 0); callCount", "1");
+callCount = 0;
+shouldBe("[0,1,2,3,4].reduce(function(a,b){ callCount++; }, 0); callCount", "5");
+callCount = 0;
+shouldBe("[0,1,2,3,4].reduce(function(a,b){ callCount++; }); callCount", "4");
+callCount = 0;
+shouldBe("[1, 2, 3, 4].reduce(function(a,b, i, thisObj){ thisObj.length--; callCount++; return a + b; }, 0); callCount", "2");
+callCount = 0;
+shouldBe("[1, 2, 3, 4].reduce(function(a,b, i, thisObj){ thisObj.length++; callCount++; return a + b; }, 0); callCount", "4");
+callCount = 0;
+shouldBe("toObject([1, 2, 3, 4]).reduce(function(a,b, i, thisObj){ thisObj.length--; callCount++; return a + b; }, 0); callCount", "4");
+callCount = 0;
+shouldBe("toObject([1, 2, 3, 4]).reduce(function(a,b, i, thisObj){ thisObj.length++; callCount++; return a + b; }, 0); callCount", "4");
+
+shouldBe("[[0,1], [2,3], [4,5]].reduce(function(a,b) {return a.concat(b);}, [])", "[0,1,2,3,4,5]");
+shouldBe("toObject([[0,1], [2,3], [4,5]]).reduce(function(a,b) {return a.concat(b);}, [])", "[0,1,2,3,4,5]");
+shouldBe("toObject([0,1,2,3,4,5]).reduce(function(a,b,i) {return a.concat([i,b]);}, [])", "[0,0,1,1,2,2,3,3,4,4,5,5]");
+shouldBe("toUnorderedObject([[0,1], [2,3], [4,5]]).reduce(function(a,b) {return a.concat(b);}, [])", "[0,1,2,3,4,5]");
+shouldBe("toUnorderedObject([0,1,2,3,4,5]).reduce(function(a,b,i) {return a.concat([i,b]);}, [])", "[0,0,1,1,2,2,3,3,4,4,5,5]");
+shouldBe("[0,1,2,3,4,5].reduce(function(a,b,i) {return a.concat([i,b]);}, [])", "[0,0,1,1,2,2,3,3,4,4,5,5]");
+shouldBe("[2,3].reduce(function() {'use strict'; return this;})", "undefined");
diff --git a/test/webkit/array-reduceRight-expected.txt b/test/webkit/array-reduceRight-expected.txt
new file mode 100644 (file)
index 0000000..eedcfe0
--- /dev/null
@@ -0,0 +1,64 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the behavior of the reduceRight() method on a number of objects.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS [0,1,2,3].reduceRight(function(a,b){ return a + b; }) is 6
+PASS [1,2,3].reduceRight(function(a,b){ return a + b; }) is 6
+PASS [0,1,2,3].reduceRight(function(a,b){ return a + b; }, 4) is 10
+PASS [1,2,3].reduceRight(function(a,b){ return a + b; }, 4) is 10
+PASS toObject([0,1,2,3]).reduceRight(function(a,b){ return a + b; }) is 6
+PASS toObject([1,2,3]).reduceRight(function(a,b){ return a + b; }) is 6
+PASS toObject([0,1,2,3]).reduceRight(function(a,b){ return a + b; }, 4) is 10
+PASS toObject([1,2,3]).reduceRight(function(a,b){ return a + b; }, 4) is 10
+PASS toUnorderedObject([0,1,2,3]).reduceRight(function(a,b){ return a + b; }) is 6
+PASS toUnorderedObject([1,2,3]).reduceRight(function(a,b){ return a + b; }) is 6
+PASS toUnorderedObject([0,1,2,3]).reduceRight(function(a,b){ return a + b; }, 4) is 10
+PASS toUnorderedObject([1,2,3]).reduceRight(function(a,b){ return a + b; }, 4) is 10
+PASS sparseArray.reduceRight(function(a,b){ return a + b; }, 0) is 10
+PASS toObject(sparseArray).reduceRight(function(a,b){ return a + b; }, 0) is 10
+PASS sparseArray.reduceRight(function(a,b){ callCount++; }); callCount is 0
+PASS toObject(sparseArray).reduceRight(function(a,b){ callCount++; }); callCount is 0
+PASS sparseArray.reduceRight(function(a,b){ callCount++; }, 0); callCount is 1
+PASS toObject(sparseArray).reduceRight(function(a,b){ callCount++; }, 0); callCount is 1
+PASS [0,1,2,3,4].reduceRight(function(a,b){ callCount++; }, 0); callCount is 5
+PASS [0,1,2,3,4].reduceRight(function(a,b){ callCount++; }); callCount is 4
+PASS [1, 2, 3, 4].reduceRight(function(a,b, i, thisObj){ thisObj.length--; callCount++; return a + b; }, 0); callCount is 4
+PASS [1, 2, 3, 4].reduceRight(function(a,b, i, thisObj){ thisObj.length = 1; callCount++; return a + b; }, 0); callCount is 2
+PASS [1, 2, 3, 4].reduceRight(function(a,b, i, thisObj){ thisObj.length++; callCount++; return a + b; }, 0); callCount is 4
+PASS toObject([1, 2, 3, 4]).reduceRight(function(a,b, i, thisObj){ thisObj.length--; callCount++; return a + b; }, 0); callCount is 4
+PASS toObject([1, 2, 3, 4]).reduceRight(function(a,b, i, thisObj){ thisObj.length++; callCount++; return a + b; }, 0); callCount is 4
+PASS [[0,1], [2,3], [4,5]].reduceRight(function(a,b) {return a.concat(b);}, []) is [4,5,2,3,0,1]
+PASS toObject([[0,1], [2,3], [4,5]]).reduceRight(function(a,b) {return a.concat(b);}, []) is [4,5,2,3,0,1]
+PASS toObject([0,1,2,3,4,5]).reduceRight(function(a,b,i) {return a.concat([i,b]);}, []) is [5,5,4,4,3,3,2,2,1,1,0,0]
+PASS toUnorderedObject([[0,1], [2,3], [4,5]]).reduceRight(function(a,b) {return a.concat(b);}, []) is [4,5,2,3,0,1]
+PASS toUnorderedObject([0,1,2,3,4,5]).reduceRight(function(a,b,i) {return a.concat([i,b]);}, []) is [5,5,4,4,3,3,2,2,1,1,0,0]
+PASS [0,1,2,3,4,5].reduceRight(function(a,b,i) {return a.concat([i,b]);}, []) is [5,5,4,4,3,3,2,2,1,1,0,0]
+PASS [2,3].reduceRight(function() {'use strict'; return this;}) is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-reduceRight.js b/test/webkit/array-reduceRight.js
new file mode 100644 (file)
index 0000000..805a46b
--- /dev/null
@@ -0,0 +1,93 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks the behavior of the reduceRight() method on a number of objects."
+);
+
+function toObject(array) {
+    var o = {};
+    for (var i in array)
+        o[i] = array[i];
+    o.length = array.length;
+    o.reduceRight = Array.prototype.reduceRight;
+    return o;
+}
+function toUnorderedObject(array) {
+    var o = {};
+    var props = [];
+    for (var i in array)
+        props.push(i);
+    for (var i = props.length - 1; i >= 0; i--)
+        o[props[i]] = array[props[i]];
+    o.length = array.length;
+    o.reduceRight = Array.prototype.reduceRight;
+    return o;
+}
+
+shouldBe("[0,1,2,3].reduceRight(function(a,b){ return a + b; })", "6");
+shouldBe("[1,2,3].reduceRight(function(a,b){ return a + b; })", "6");
+shouldBe("[0,1,2,3].reduceRight(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("[1,2,3].reduceRight(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("toObject([0,1,2,3]).reduceRight(function(a,b){ return a + b; })", "6");
+shouldBe("toObject([1,2,3]).reduceRight(function(a,b){ return a + b; })", "6");
+shouldBe("toObject([0,1,2,3]).reduceRight(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("toObject([1,2,3]).reduceRight(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("toUnorderedObject([0,1,2,3]).reduceRight(function(a,b){ return a + b; })", "6");
+shouldBe("toUnorderedObject([1,2,3]).reduceRight(function(a,b){ return a + b; })", "6");
+shouldBe("toUnorderedObject([0,1,2,3]).reduceRight(function(a,b){ return a + b; }, 4)", "10");
+shouldBe("toUnorderedObject([1,2,3]).reduceRight(function(a,b){ return a + b; }, 4)", "10");
+sparseArray = [];
+sparseArray[10] = 10;
+shouldBe("sparseArray.reduceRight(function(a,b){ return a + b; }, 0)", "10");
+shouldBe("toObject(sparseArray).reduceRight(function(a,b){ return a + b; }, 0)", "10");
+var callCount = 0;
+shouldBe("sparseArray.reduceRight(function(a,b){ callCount++; }); callCount", "0");
+callCount = 0;
+shouldBe("toObject(sparseArray).reduceRight(function(a,b){ callCount++; }); callCount", "0");
+var callCount = 0;
+shouldBe("sparseArray.reduceRight(function(a,b){ callCount++; }, 0); callCount", "1");
+callCount = 0;
+shouldBe("toObject(sparseArray).reduceRight(function(a,b){ callCount++; }, 0); callCount", "1");
+callCount = 0;
+shouldBe("[0,1,2,3,4].reduceRight(function(a,b){ callCount++; }, 0); callCount", "5");
+callCount = 0;
+shouldBe("[0,1,2,3,4].reduceRight(function(a,b){ callCount++; }); callCount", "4");
+callCount = 0;
+shouldBe("[1, 2, 3, 4].reduceRight(function(a,b, i, thisObj){ thisObj.length--; callCount++; return a + b; }, 0); callCount", "4");
+callCount = 0;
+shouldBe("[1, 2, 3, 4].reduceRight(function(a,b, i, thisObj){ thisObj.length = 1; callCount++; return a + b; }, 0); callCount", "2");
+callCount = 0;
+shouldBe("[1, 2, 3, 4].reduceRight(function(a,b, i, thisObj){ thisObj.length++; callCount++; return a + b; }, 0); callCount", "4");
+callCount = 0;
+shouldBe("toObject([1, 2, 3, 4]).reduceRight(function(a,b, i, thisObj){ thisObj.length--; callCount++; return a + b; }, 0); callCount", "4");
+callCount = 0;
+shouldBe("toObject([1, 2, 3, 4]).reduceRight(function(a,b, i, thisObj){ thisObj.length++; callCount++; return a + b; }, 0); callCount", "4");
+
+shouldBe("[[0,1], [2,3], [4,5]].reduceRight(function(a,b) {return a.concat(b);}, [])", "[4,5,2,3,0,1]");
+shouldBe("toObject([[0,1], [2,3], [4,5]]).reduceRight(function(a,b) {return a.concat(b);}, [])", "[4,5,2,3,0,1]");
+shouldBe("toObject([0,1,2,3,4,5]).reduceRight(function(a,b,i) {return a.concat([i,b]);}, [])", "[5,5,4,4,3,3,2,2,1,1,0,0]");
+shouldBe("toUnorderedObject([[0,1], [2,3], [4,5]]).reduceRight(function(a,b) {return a.concat(b);}, [])", "[4,5,2,3,0,1]");
+shouldBe("toUnorderedObject([0,1,2,3,4,5]).reduceRight(function(a,b,i) {return a.concat([i,b]);}, [])", "[5,5,4,4,3,3,2,2,1,1,0,0]");
+shouldBe("[0,1,2,3,4,5].reduceRight(function(a,b,i) {return a.concat([i,b]);}, [])", "[5,5,4,4,3,3,2,2,1,1,0,0]");
+shouldBe("[2,3].reduceRight(function() {'use strict'; return this;})", "undefined");
diff --git a/test/webkit/array-reset-large-index-expected.txt b/test/webkit/array-reset-large-index-expected.txt
new file mode 100644 (file)
index 0000000..9ab93cc
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test puts an item in a big index and then tries to change it. It shoudl change successfully.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS array[10001] is 5
+PASS array[10002] is "b"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-reset-large-index.js b/test/webkit/array-reset-large-index.js
new file mode 100644 (file)
index 0000000..532d9f0
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test puts an item in a big index and then tries to change it. It shoudl change successfully."
+);
+
+var array = [];
+array[10001] = 0;
+array[10001] = 5;
+array[10002] = "a";
+array[10002] = "b";
+
+shouldBe('array[10001]', '5');
+shouldBe('array[10002]', '"b"');
diff --git a/test/webkit/array-sort-numericCompare-expected.txt b/test/webkit/array-sort-numericCompare-expected.txt
new file mode 100644 (file)
index 0000000..a33e70f
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that a call to array.sort(compareFunction) works correctly for numeric comparisons (arg1 - arg2), and also for things that might look like numeric comparisons.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS [3,1,5,2,4].sort(doSort) is [1,2,3,4,5]
+PASS [3,1,5,2,4].sort(dontSort) is [3,1,5,2,4]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-sort-numericCompare.js b/test/webkit/array-sort-numericCompare.js
new file mode 100644 (file)
index 0000000..74df82f
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that a call to array.sort(compareFunction) works correctly for numeric comparisons (arg1 - arg2), and also for things that might look like numeric comparisons."
+);
+
+function doSort(x, y)
+{
+    return x - y;
+}
+
+function dontSort(w, x, y)
+{
+    return x - y;
+}
+
+shouldBe("[3,1,5,2,4].sort(doSort)", "[1,2,3,4,5]");
+shouldBe("[3,1,5,2,4].sort(dontSort)", "[3,1,5,2,4]");
diff --git a/test/webkit/array-sort-reentrance-expected.txt b/test/webkit/array-sort-reentrance-expected.txt
new file mode 100644 (file)
index 0000000..7119af9
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that a call to array.sort(compareFunction) does not crash from within a sort comparison function.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-sort-reentrance.js b/test/webkit/array-sort-reentrance.js
new file mode 100644 (file)
index 0000000..690ab38
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that a call to array.sort(compareFunction) does not crash from within a sort comparison function."
+);
+
+var numbers1 = [1, 2, 3, 4, 5, 6, 7];
+var numbers2 = numbers1.slice();
+
+function compareFn1(a, b) {
+    return b - a;
+}
+
+function compareFn2(a, b) {
+    numbers1.sort(compareFn1);
+    return b - a;
+}
+
+numbers2.sort(compareFn2);
diff --git a/test/webkit/array-sort-small-sparse-array-with-large-length-expected.txt b/test/webkit/array-sort-small-sparse-array-with-large-length-expected.txt
new file mode 100644 (file)
index 0000000..1de82f5
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we can quickly sort a small sparse array that has a large length.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+array[0] = 42
+PASS result is "42"
+PASS array.length is 10000001
+PASS array[0] is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-sort-small-sparse-array-with-large-length.js b/test/webkit/array-sort-small-sparse-array-with-large-length.js
new file mode 100644 (file)
index 0000000..05478d6
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we can quickly sort a small sparse array that has a large length."
+);
+
+var array = [];
+array[10000000] = 42;
+array.sort();
+var result = "";
+for (var s in array) {
+    debug("array[" + s + "] = " + array[s]);
+    if (result)
+        result += ",";
+    result += array[s];
+}
+shouldBe("result", "\"42\"");
+shouldBe("array.length", "10000001");
+shouldBe("array[0]", "42");
diff --git a/test/webkit/array-sort-sparse-expected.txt b/test/webkit/array-sort-sparse-expected.txt
new file mode 100644 (file)
index 0000000..485092d
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that arrays and array like objects containing holes are sorted correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS testSort([,undefined,0,1]) is true
+PASS testSort({length:4,1:undefined,2:0,3:1}) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-sort-sparse.js b/test/webkit/array-sort-sparse.js
new file mode 100644 (file)
index 0000000..41a91f1
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that arrays and array like objects containing holes are sorted correctly."
+);
+
+function testSort(x)
+{
+    [].sort.call(x)
+    return x[0] < x[1] && x[2] === undefined && !(3 in x) && x.length == 4;
+}
+
+shouldBeTrue("testSort([,undefined,0,1])");
+shouldBeTrue("testSort({length:4,1:undefined,2:0,3:1})");
diff --git a/test/webkit/array-tostring-and-join-expected.txt b/test/webkit/array-tostring-and-join-expected.txt
new file mode 100644 (file)
index 0000000..9cf3062
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that toString and join share the same HashSet for visited elements.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS arr.join() is '1,2,,**'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-tostring-and-join.js b/test/webkit/array-tostring-and-join.js
new file mode 100644 (file)
index 0000000..b4fdb51
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+"This test checks that toString and join share the same HashSet for visited elements."
+
+);
+
+var arr = [1, 2];
+var obj = {};
+obj.__proto__.toString = function() { return "*" + arr + "*"; }
+arr[2] = arr;
+arr[3] = obj;
+
+shouldBe("arr.join()", "'1,2,,**'");
diff --git a/test/webkit/array-type-speculation-expected.txt b/test/webkit/array-type-speculation-expected.txt
new file mode 100644 (file)
index 0000000..de43631
--- /dev/null
@@ -0,0 +1,48 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that storing into something that is not array does not crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is "foo"
+PASS result is "foo"
+PASS result is undefined
+PASS result is undefined
+PASS result is undefined
+PASS result is "foo"
+PASS result is undefined
+PASS result is "foo"
+PASS result is "foo"
+PASS result is undefined
+PASS result is "foo"
+PASS result is undefined
+PASS result is undefined
+PASS result is undefined
+PASS result is "foo"
+PASS result is "foo"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/array-type-speculation.js b/test/webkit/array-type-speculation.js
new file mode 100644 (file)
index 0000000..a5467c0
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that storing into something that is not array does not crash."
+);
+
+theCode = "\n\
+function storeFooByValOrDoArithmetic(o, p1, p2, v) {\n\
+    var x;\n\
+    if (p1) {\n\
+        x = o.foo;\n\
+    } else {\n\
+        x = v;\n\
+        if (p2) {\n\
+            x--;\n\
+        } else {\n\
+            x++;\n\
+        }\n\
+    }\n\
+    x[5] = \"foo\";\n\
+}\n\
+\n\
+function runTheTest(p1, p2) {\n\
+    var o = new Object();\n\
+    o.foo = new Object();\n\
+    storeFooByValOrDoArithmetic(o, p1, p2, 1);\n\
+    return o.foo[5];\n\
+}\n";
+
+function runWithPredicates(predicateArray) {
+    var myCode = theCode;
+
+    for (var i = 0; i < predicateArray.length; ++i) {
+        myCode += "result = runTheTest(" + predicateArray[i][0] + ", " + predicateArray[i][1] + ");\n";
+        myCode += "shouldBe(\"result\", " + predicateArray[i][2] + ");\n";
+    }
+
+    eval(myCode);
+}
+
+runWithPredicates([[true, true, "\"\\\"foo\\\"\""], [true, false, "\"\\\"foo\\\"\""], [false, true, "\"undefined\""], [false, false, "\"undefined\""]]);
+runWithPredicates([[false, false, "\"undefined\""], [true, false, "\"\\\"foo\\\"\""], [false, true, "\"undefined\""], [true, true, "\"\\\"foo\\\"\""]]);
+runWithPredicates([[true, true, "\"\\\"foo\\\"\""], [false, true, "\"undefined\""], [true, false, "\"\\\"foo\\\"\""], [false, false, "\"undefined\""]]);
+runWithPredicates([[false, false, "\"undefined\""], [false, true, "\"undefined\""], [true, false, "\"\\\"foo\\\"\""], [true, true, "\"\\\"foo\\\"\""]]);
diff --git a/test/webkit/avl-crash-expected.txt b/test/webkit/avl-crash-expected.txt
new file mode 100644 (file)
index 0000000..574a5f2
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for a crash in sort() that was seen on a particular input data set.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/avl-crash.js b/test/webkit/avl-crash.js
new file mode 100644 (file)
index 0000000..ff6a75e
--- /dev/null
@@ -0,0 +1,121 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks for a crash in sort() that was seen on a particular input data set."
+);
+
+function natcompare(a, b) {
+    if (a == b)
+        return 0;
+    return (a < b) ? -1 : 1;
+}
+
+SubwayData = [
+"23rd St-Broadway ",
+"45 Road-Court Sq",
+"LIC-Court Sq",
+"LIC-Court Sq",
+"23rd St-Park Ave S",
+"241st St",
+"242nd St",
+"25th Ave",
+"25th St",
+"28th St-7th Ave",
+"28th St-Broadway",
+"28th St-Park Ave S",
+"2nd Ave-Houston St",
+"30th Ave",
+"33rd St",
+"33rd St-Park Ave",
+"34th St-6th Ave",
+"34th St-7th Ave",
+"34th St-8th Ave",
+"36th Ave",
+"36th St",
+"36th St",
+"39th Ave",
+"3rd Ave-138th St",
+"3rd Ave-149th St",
+"3rd Ave-14th St",
+"40th St",
+"42nd St-5th Ave-6th Ave",
+"42nd St-5th Ave-6th Ave",
+"45th St",
+"46th St",
+"46th St",
+"47-50th Sts-Rockefeller Center",
+"49th St-7th Ave",
+"50th St-New Utrecht Ave",
+"9th Ave",
+"90th St-Elmhurst Ave",
+"96th St",
+"96th St",
+"96th St",
+"9th St-4th Ave",
+"Alabama Ave",
+"Allerton Ave",
+"Aqueduct-North Conduit Ave",
+"Astor Place",
+"Astoria Blvd",
+"Atlantic Ave",
+"Atlantic Ave-Pacific St",
+"Ave H",
+"Ave N",
+"Ave P",
+"Ave U",
+"Ave U",
+"Ave U",
+"Ave X",
+"Bay Pkwy",
+"Bay Pkwy",
+"Bay Pkwy-22nd Ave",
+"Bay Ridge Ave",
+"Baychester Ave",
+"Beach 105th St",
+"Beach 25th St",
+"Beach 36th St",
+"Beach 44th St",
+"Beach 60th St",
+"Beach 67th St",
+"Beach 90th St",
+"Beach 98th St",
+"Bedford Ave",
+"Bedford Park Blvd",
+"Broadway",
+"Broadway",
+"Bronx Park East",
+"Brook Ave",
+"Buhre Ave",
+"Burke Ave",
+"Burnside Ave",
+"Bushwick Ave",
+"Uptown Bleecker St-Lafayette St",
+"Downtown Bleecker St-Lafayette St",
+"Canal Street",
+"Canal Street",
+"Canal Street",
+"Canal-Church Sts"
+];
+
+SubwayData.sort(natcompare)
diff --git a/test/webkit/bitops-type-tag-expected.txt b/test/webkit/bitops-type-tag-expected.txt
new file mode 100644 (file)
index 0000000..7a1fb9c
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Ensure various bit operators correctly tag the final result value
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS aDouble>>27 is 0
+PASS aDouble>>27|0 is 0
+PASS aDouble>>0 is 100000000
+PASS aDouble>>0|0 is 100000000
+PASS aDouble|0 is 100000000
+PASS (function(x){ return 2147483648>>>x; })(31) is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/bitops-type-tag.js b/test/webkit/bitops-type-tag.js
new file mode 100644 (file)
index 0000000..562ec0c
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Ensure various bit operators correctly tag the final result value");
+
+aDouble = 100000000.5;
+shouldBe("aDouble>>27", "0");
+shouldBe("aDouble>>27|0", "0");
+shouldBe("aDouble>>0", "100000000");
+shouldBe("aDouble>>0|0", "100000000");
+shouldBe("aDouble|0", "100000000");
+
+shouldBe("(function(x){ return 2147483648>>>x; })(31)", "1");
diff --git a/test/webkit/boolean-argument-prediction-expected.txt b/test/webkit/boolean-argument-prediction-expected.txt
new file mode 100644 (file)
index 0000000..2a98f4d
--- /dev/null
@@ -0,0 +1,48 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that arguments predicted to be boolean are checked.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS predictBooleanArgument(true) is "yes"
+PASS predictBooleanArgument(false) is "no"
+PASS predictBooleanArgument(true) is "yes"
+PASS predictBooleanArgument(false) is "no"
+PASS predictBooleanArgument(0) is "no"
+PASS predictBooleanArgument(1) is "yes"
+PASS predictBooleanArgument(2) is "yes"
+PASS predictBooleanArgument(3) is "yes"
+PASS predictBooleanArgument(4) is "yes"
+PASS predictBooleanArgument(true) is "yes"
+PASS predictBooleanArgument(false) is "no"
+PASS predictBooleanArgument(0) is "no"
+PASS predictBooleanArgument(1) is "yes"
+PASS predictBooleanArgument(2) is "yes"
+PASS predictBooleanArgument(3) is "yes"
+PASS predictBooleanArgument(4) is "yes"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/boolean-argument-prediction.js b/test/webkit/boolean-argument-prediction.js
new file mode 100644 (file)
index 0000000..ac0c615
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that arguments predicted to be boolean are checked."
+);
+
+function predictBooleanArgument(b) {
+    if (b) {
+        return "yes";
+    } else {
+        return "no";
+    }
+}
+
+shouldBe("predictBooleanArgument(true)", "\"yes\"");
+shouldBe("predictBooleanArgument(false)", "\"no\"");
+
+for (var i = 0; i < 1000; ++i) {
+    predictBooleanArgument(true);
+    predictBooleanArgument(false);
+}
+
+shouldBe("predictBooleanArgument(true)", "\"yes\"");
+shouldBe("predictBooleanArgument(false)", "\"no\"");
+
+shouldBe("predictBooleanArgument(0)", "\"no\"");
+shouldBe("predictBooleanArgument(1)", "\"yes\"");
+shouldBe("predictBooleanArgument(2)", "\"yes\"");
+shouldBe("predictBooleanArgument(3)", "\"yes\"");
+shouldBe("predictBooleanArgument(4)", "\"yes\"");
+
+for (var i = 0; i < 1000; ++i) {
+    predictBooleanArgument(0);
+    predictBooleanArgument(1);
+    predictBooleanArgument(2);
+    predictBooleanArgument(3);
+    predictBooleanArgument(4);
+}
+
+shouldBe("predictBooleanArgument(true)", "\"yes\"");
+shouldBe("predictBooleanArgument(false)", "\"no\"");
+
+shouldBe("predictBooleanArgument(0)", "\"no\"");
+shouldBe("predictBooleanArgument(1)", "\"yes\"");
+shouldBe("predictBooleanArgument(2)", "\"yes\"");
+shouldBe("predictBooleanArgument(3)", "\"yes\"");
+shouldBe("predictBooleanArgument(4)", "\"yes\"");
diff --git a/test/webkit/boxed-double-to-int-expected.txt b/test/webkit/boxed-double-to-int-expected.txt
new file mode 100644 (file)
index 0000000..4cbaa0f
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that converting a boxed double to an integer does not crash the register allocator.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS boxedDoubleToInt(1, 2) is 3.5
+PASS boxedDoubleToInt(3, 4) is 4.5
+PASS boxedDoubleToInt(5, 6) is 7.5
+PASS boxedDoubleToInt(7, 8) is 8.5
+PASS boxedDoubleToInt(9, 10) is 11.5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/boxed-double-to-int.js b/test/webkit/boxed-double-to-int.js
new file mode 100644 (file)
index 0000000..578ba04
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that converting a boxed double to an integer does not crash the register allocator."
+);
+
+function boxedDoubleToInt(x, y) {
+    var y = x / 2;
+    var z = y + 2;
+    return (y | 1) + z;
+}
+
+shouldBe("boxedDoubleToInt(1, 2)", "3.5");
+shouldBe("boxedDoubleToInt(3, 4)", "4.5");
+shouldBe("boxedDoubleToInt(5, 6)", "7.5");
+shouldBe("boxedDoubleToInt(7, 8)", "8.5");
+shouldBe("boxedDoubleToInt(9, 10)", "11.5");
diff --git a/test/webkit/break-ASI-expected.txt b/test/webkit/break-ASI-expected.txt
new file mode 100644 (file)
index 0000000..8188fea
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to make sure we don't incorrectly insert a semi colon after a break statement
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS do { if(0) break
+;else true; } while (0) is true
+PASS do { if(0) continue
+;else true; } while (0) is true
+PASS (function(){if (0) return
+;else return true;})() is true
+PASS do { if(0) throw 'x';else true; } while (0) is true
+PASS if (0) throw
+'Shouldn't have parsed this.'; threw exception SyntaxError: Illegal newline after throw.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/break-ASI.js b/test/webkit/break-ASI.js
new file mode 100644 (file)
index 0000000..2ccdf2c
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to make sure we don't incorrectly insert a semi colon after a break statement");
+
+shouldBeTrue("do { if(0) break\n;else true; } while (0)")
+shouldBeTrue("do { if(0) continue\n;else true; } while (0)")
+shouldBeTrue("(function(){if (0) return\n;else return true;})()")
+shouldBeTrue("do { if(0) throw 'x';else true; } while (0)")
+shouldThrow("if (0) throw\n'Shouldn\'t have parsed this.';")
diff --git a/test/webkit/cached-call-uninitialized-arguments-expected.txt b/test/webkit/cached-call-uninitialized-arguments-expected.txt
new file mode 100644 (file)
index 0000000..79cf015
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that uninitialized parameters for cached call functions correctly defaults to undefined.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS arg4 is undefined.
+PASS arg5 is undefined.
+PASS arg6 is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/cached-call-uninitialized-arguments.js b/test/webkit/cached-call-uninitialized-arguments.js
new file mode 100644 (file)
index 0000000..de3f098
--- /dev/null
@@ -0,0 +1,66 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that uninitialized parameters for cached call functions correctly defaults to undefined."
+
+);
+
+function doForEach(arr) {
+    function callback(element, index, array, arg4, arg5, arg6) {
+
+        function shouldBeUndefined(_a) {
+            var exception;
+            var _av;
+            try {
+                _av = eval(_a);
+            } catch (e) {
+                exception = e;
+            }
+
+            if (exception)
+                testFailed(_a + " should be undefined. Threw exception " + exception);
+            else if (typeof _av == "undefined")
+                testPassed(_a + " is undefined.");
+            else
+                testFailed(_a + " should be undefined. Was " + _av);
+        }
+
+        shouldBeUndefined("arg4");
+        shouldBeUndefined("arg5");
+        shouldBeUndefined("arg6");
+    }
+
+    arr.forEach(callback);
+}
+
+function callAfterRecursingForDepth(depth, func, arr) {
+    if (depth > 0) {
+        callAfterRecursingForDepth(depth - 1, func, arr);
+    } else {
+        func(arr);
+    }
+}
+
+var arr = [1];
+callAfterRecursingForDepth(20, doForEach, arr);
diff --git a/test/webkit/call-apply-crash-expected.txt b/test/webkit/call-apply-crash-expected.txt
new file mode 100644 (file)
index 0000000..3fdf802
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure that the registerfile is grown correctly when calling apply
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Did not crash using apply
+PASS Did not crash using apply
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/call-apply-crash.js b/test/webkit/call-apply-crash.js
new file mode 100644 (file)
index 0000000..766a0ee
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure that the registerfile is grown correctly when calling apply");
+
+function testLog() { testPassed(this); }
+(function () {
+    Function.prototype.call.apply(testLog, arguments);
+})('Did not crash using apply', 0, 0); // needs 3+ arguments
+(function () {
+    arguments; // reify the arguments object.
+    Function.prototype.call.apply(testLog, arguments);
+})('Did not crash using apply', 0, 0); // needs 3+ arguments
diff --git a/test/webkit/char-at-expected.txt b/test/webkit/char-at-expected.txt
new file mode 100644 (file)
index 0000000..f99301e
--- /dev/null
@@ -0,0 +1,110 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This is a test of the charAt and charCodeAt string functions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "".charAt() is ""
+PASS "".charCodeAt() is NaN
+PASS "".charAt(undefined) is ""
+PASS "".charCodeAt(undefined) is NaN
+PASS "".charAt(0) is ""
+PASS "".charCodeAt(0) is NaN
+PASS "".charAt(null) is ""
+PASS "".charCodeAt(null) is NaN
+PASS "".charAt(false) is ""
+PASS "".charCodeAt(false) is NaN
+PASS "".charAt(true) is ""
+PASS "".charCodeAt(true) is NaN
+PASS "".charAt(0) is ""
+PASS "".charCodeAt(0) is NaN
+PASS "".charAt(0.1) is ""
+PASS "".charCodeAt(0.1) is NaN
+PASS "".charAt(999) is ""
+PASS "".charCodeAt(999) is NaN
+PASS "".charAt(Infinity) is ""
+PASS "".charCodeAt(Infinity) is NaN
+PASS "".charAt(-1) is ""
+PASS "".charCodeAt(-1) is NaN
+PASS "".charAt(-Infinity) is ""
+PASS "".charCodeAt(-Infinity) is NaN
+PASS "".charAt(NaN) is ""
+PASS "".charCodeAt(NaN) is NaN
+PASS "x".charAt() is "x"
+PASS "x".charCodeAt() is 120
+PASS "x".charAt(undefined) is "x"
+PASS "x".charCodeAt(undefined) is 120
+PASS "x".charAt(0) is "x"
+PASS "x".charCodeAt(0) is 120
+PASS "x".charAt(null) is "x"
+PASS "x".charCodeAt(null) is 120
+PASS "x".charAt(false) is "x"
+PASS "x".charCodeAt(false) is 120
+PASS "x".charAt(true) is ""
+PASS "x".charCodeAt(true) is NaN
+PASS "x".charAt(0) is "x"
+PASS "x".charCodeAt(0) is 120
+PASS "x".charAt(0.1) is "x"
+PASS "x".charCodeAt(0.1) is 120
+PASS "x".charAt(999) is ""
+PASS "x".charCodeAt(999) is NaN
+PASS "x".charAt(Infinity) is ""
+PASS "x".charCodeAt(Infinity) is NaN
+PASS "x".charAt(-1) is ""
+PASS "x".charCodeAt(-1) is NaN
+PASS "x".charAt(-Infinity) is ""
+PASS "x".charCodeAt(-Infinity) is NaN
+PASS "x".charAt(NaN) is "x"
+PASS "x".charCodeAt(NaN) is 120
+PASS "xy".charAt() is "x"
+PASS "xy".charCodeAt() is 120
+PASS "xy".charAt(undefined) is "x"
+PASS "xy".charCodeAt(undefined) is 120
+PASS "xy".charAt(0) is "x"
+PASS "xy".charCodeAt(0) is 120
+PASS "xy".charAt(null) is "x"
+PASS "xy".charCodeAt(null) is 120
+PASS "xy".charAt(false) is "x"
+PASS "xy".charCodeAt(false) is 120
+PASS "xy".charAt(true) is "y"
+PASS "xy".charCodeAt(true) is 121
+PASS "xy".charAt(0) is "x"
+PASS "xy".charCodeAt(0) is 120
+PASS "xy".charAt(0.1) is "x"
+PASS "xy".charCodeAt(0.1) is 120
+PASS "xy".charAt(999) is ""
+PASS "xy".charCodeAt(999) is NaN
+PASS "xy".charAt(Infinity) is ""
+PASS "xy".charCodeAt(Infinity) is NaN
+PASS "xy".charAt(-1) is ""
+PASS "xy".charCodeAt(-1) is NaN
+PASS "xy".charAt(-Infinity) is ""
+PASS "xy".charCodeAt(-Infinity) is NaN
+PASS "xy".charAt(NaN) is "x"
+PASS "xy".charCodeAt(NaN) is 120
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/char-at.js b/test/webkit/char-at.js
new file mode 100644 (file)
index 0000000..7af8bc9
--- /dev/null
@@ -0,0 +1,131 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This is a test of the charAt and charCodeAt string functions.'
+);
+
+var undefined;
+
+var cases = [
+    ["", "omitted"],
+    ["", undefined],
+    ["", 0],
+    ["", null],
+    ["", false],
+    ["", true],
+    ["", 0.0],
+    ["", 0.1],
+    ["", 999],
+    ["", 1/0],
+    ["", -1],
+    ["", -1/0],
+    ["", 0/0],
+
+    ["x", "omitted"],
+    ["x", undefined],
+    ["x", 0],
+    ["x", null],
+    ["x", false],
+    ["x", true],
+    ["x", 0.0],
+    ["x", 0.1],
+    ["x", 999],
+    ["x", 1/0],
+    ["x", -1],
+    ["x", -1/0],
+    ["x", 0/0],
+
+    ["xy", "omitted"],
+    ["xy", undefined],
+    ["xy", 0],
+    ["xy", null],
+    ["xy", false],
+    ["xy", true],
+    ["xy", 0.0],
+    ["xy", 0.1],
+    ["xy", 999],
+    ["xy", 1/0],
+    ["xy", -1],
+    ["xy", -1/0],
+    ["xy", 0/0],
+];
+
+var answers = [['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['"x"', '120'],
+['"x"', '120'],
+['"x"', '120'],
+['"x"', '120'],
+['"x"', '120'],
+['""', 'NaN'],
+['"x"', '120'],
+['"x"', '120'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['"x"', '120'],
+['"x"', '120'],
+['"x"', '120'],
+['"x"', '120'],
+['"x"', '120'],
+['"x"', '120'],
+['"y"', '121'],
+['"x"', '120'],
+['"x"', '120'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['""', 'NaN'],
+['"x"', '120']];
+
+for (var i = 0; i < cases.length; ++i)
+{
+    var item = cases[i];
+    var result = answers[i];
+    if (item[1] == "omitted") {
+        shouldBe('"' + item[0] + '".charAt()', result[0]);
+        if (result[1] == 'NaN')
+            shouldBeNaN('"' + item[0] + '".charCodeAt()');
+        else
+            shouldBe('"' + item[0] + '".charCodeAt()', result[1]);
+    } else {
+        shouldBe('"' + item[0] + '".charAt(' + item[1] + ')', result[0]);
+        if (result[1] == 'NaN')
+            shouldBeNaN('"' + item[0] + '".charCodeAt(' + item[1] + ')');
+        else
+            shouldBe('"' + item[0] + '".charCodeAt(' + item[1] + ')', result[1]);
+    }
+}
diff --git a/test/webkit/closure-inside-extra-arg-call-expected.txt b/test/webkit/closure-inside-extra-arg-call-expected.txt
new file mode 100644 (file)
index 0000000..bc88972
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that activation objects for functions called with too many arguments are created properly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS c1() is "xyxy"
+PASS c2() is "xyxy"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/closure-inside-extra-arg-call.js b/test/webkit/closure-inside-extra-arg-call.js
new file mode 100644 (file)
index 0000000..15e7aeb
--- /dev/null
@@ -0,0 +1,79 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+"This test checks that activation objects for functions called with too many arguments are created properly."
+
+);
+
+
+var c1;
+
+function f1()
+{
+    var a = "x";
+    var b = "y";
+    var c = a + b;
+    var d = a + b + c;
+
+    c1 = function() { return d; }
+}
+
+f1(0, 0, 0, 0, 0, 0, 0, 0, 0);
+
+function s1() {
+    shouldBe("c1()", '"xyxy"');
+}
+
+function t1() {
+    var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p;
+    s1();
+}
+
+t1();
+
+var c2;
+
+function f2()
+{
+    var a = "x";
+    var b = "y";
+    var c = a + b;
+    var d = a + b + c;
+
+    c2 = function() { return d; }
+}
+
+new f2(0, 0, 0, 0, 0, 0, 0, 0, 0);
+
+function s2() {
+    shouldBe("c2()", '"xyxy"');
+}
+
+function t2() {
+    var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p;
+    s2();
+}
+
+t2();
diff --git a/test/webkit/codegen-assign-nontemporary-as-rexp-expected.txt b/test/webkit/codegen-assign-nontemporary-as-rexp-expected.txt
new file mode 100644 (file)
index 0000000..af1dc5b
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests whether bytecode codegen properly handles assignment as righthand expression.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS assign_as_rexp_1() is 'PASS'
+PASS assign_as_rexp_2() is 'PASS'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/codegen-assign-nontemporary-as-rexp.js b/test/webkit/codegen-assign-nontemporary-as-rexp.js
new file mode 100644 (file)
index 0000000..15fd1ec
--- /dev/null
@@ -0,0 +1,56 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests whether bytecode codegen properly handles assignment as righthand expression.'
+);
+
+
+function assign_as_rexp_1() {
+  var obj = {};
+  var victim = 'PASS';
+  obj.__defineSetter__('slot',
+      function(v) {
+          victim = 'FAIL';
+      });
+  var obj2 = {};
+  obj2.forward = (obj['slot'] = victim);
+  return obj2.forward;
+};
+
+shouldBe("assign_as_rexp_1()", "'PASS'");
+
+
+function assign_as_rexp_2() {
+  var obj = {};
+  var victim = 'PASS';
+  obj.__defineSetter__('slot',
+      function(v) {
+          victim = 'FAIL';
+      });
+  var obj2 = {};
+  obj2.forward = (obj.slot = victim);
+  return obj2.forward;
+};
+
+shouldBe("assign_as_rexp_2()", "'PASS'");
diff --git a/test/webkit/codegen-jless-expected.txt b/test/webkit/codegen-jless-expected.txt
new file mode 100644 (file)
index 0000000..e731e60
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests particular unusual cases of jump-if-less codegen.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS !(true && undefined > 0) ? 'true' : 'false' is 'true'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/codegen-jless.js b/test/webkit/codegen-jless.js
new file mode 100644 (file)
index 0000000..ba8ba6f
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests particular unusual cases of jump-if-less codegen."
+);
+
+shouldBe("!(true && undefined > 0) ? 'true' : 'false'", "'true'");
diff --git a/test/webkit/codegen-loops-logical-nodes-expected.txt b/test/webkit/codegen-loops-logical-nodes-expected.txt
new file mode 100644 (file)
index 0000000..f77b623
--- /dev/null
@@ -0,0 +1,127 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests loop codegen when the condition is a logical node.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS while_or_eq() is true
+PASS while_or_neq() is true
+PASS while_or_less() is true
+PASS while_or_lesseq() is true
+PASS while_and_eq() is true
+PASS while_and_neq() is true
+PASS while_and_less() is true
+PASS while_and_lesseq() is true
+PASS for_or_eq() is true
+PASS for_or_neq() is true
+PASS for_or_less() is true
+PASS for_or_lesseq() is true
+PASS for_and_eq() is true
+PASS for_and_neq() is true
+PASS for_and_less() is true
+PASS for_and_lesseq() is true
+PASS dowhile_or_eq() is true
+PASS dowhile_or_neq() is true
+PASS dowhile_or_less() is true
+PASS dowhile_or_lesseq() is true
+PASS dowhile_and_eq() is true
+PASS dowhile_and_neq() is true
+PASS dowhile_and_less() is true
+PASS dowhile_and_lesseq() is true
+PASS while_not_or_eq() is false
+PASS while_not_or_neq() is false
+PASS while_not_or_less() is false
+PASS while_not_or_lesseq() is false
+PASS while_not_and_eq() is false
+PASS while_not_and_neq() is false
+PASS while_not_and_less() is false
+PASS while_not_and_lesseq() is false
+PASS for_not_or_eq() is false
+PASS for_not_or_neq() is false
+PASS for_not_or_less() is false
+PASS for_not_or_lesseq() is false
+PASS for_not_and_eq() is false
+PASS for_not_and_neq() is false
+PASS for_not_and_less() is false
+PASS for_not_and_lesseq() is false
+PASS dowhile_not_or_eq() is false
+PASS dowhile_not_or_neq() is false
+PASS dowhile_not_or_less() is false
+PASS dowhile_not_or_lesseq() is false
+PASS dowhile_not_and_eq() is false
+PASS dowhile_not_and_neq() is false
+PASS dowhile_not_and_less() is false
+PASS dowhile_not_and_lesseq() is false
+PASS float_while_or_eq() is true
+PASS float_while_or_neq() is true
+PASS float_while_or_less() is true
+PASS float_while_or_lesseq() is true
+PASS float_while_and_eq() is true
+PASS float_while_and_neq() is true
+PASS float_while_and_less() is true
+PASS float_while_and_lesseq() is true
+PASS float_for_or_eq() is true
+PASS float_for_or_neq() is true
+PASS float_for_or_less() is true
+PASS float_for_or_lesseq() is true
+PASS float_for_and_eq() is true
+PASS float_for_and_neq() is true
+PASS float_for_and_less() is true
+PASS float_for_and_lesseq() is true
+PASS float_dowhile_or_eq() is true
+PASS float_dowhile_or_neq() is true
+PASS float_dowhile_or_less() is true
+PASS float_dowhile_or_lesseq() is true
+PASS float_dowhile_and_eq() is true
+PASS float_dowhile_and_neq() is true
+PASS float_dowhile_and_less() is true
+PASS float_dowhile_and_lesseq() is true
+PASS float_while_not_or_eq() is false
+PASS float_while_not_or_neq() is false
+PASS float_while_not_or_less() is false
+PASS float_while_not_or_lesseq() is false
+PASS float_while_not_and_eq() is false
+PASS float_while_not_and_neq() is false
+PASS float_while_not_and_less() is false
+PASS float_while_not_and_lesseq() is false
+PASS float_for_not_or_eq() is false
+PASS float_for_not_or_neq() is false
+PASS float_for_not_or_less() is false
+PASS float_for_not_or_lesseq() is false
+PASS float_for_not_and_eq() is false
+PASS float_for_not_and_neq() is false
+PASS float_for_not_and_less() is false
+PASS float_for_not_and_lesseq() is false
+PASS float_dowhile_not_or_eq() is false
+PASS float_dowhile_not_or_neq() is false
+PASS float_dowhile_not_or_less() is false
+PASS float_dowhile_not_or_lesseq() is false
+PASS float_dowhile_not_and_eq() is false
+PASS float_dowhile_not_and_neq() is false
+PASS float_dowhile_not_and_less() is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/codegen-loops-logical-nodes.js b/test/webkit/codegen-loops-logical-nodes.js
new file mode 100644 (file)
index 0000000..935c0fc
--- /dev/null
@@ -0,0 +1,1080 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests loop codegen when the condition is a logical node."
+);
+
+function while_or_eq()
+{
+    var a = 0;
+    while (a == 0 || a == 0)
+        return true;
+    return false;
+}
+
+shouldBeTrue("while_or_eq()");
+
+function while_or_neq()
+{
+    var a = 0;
+    while (a != 1 || a != 1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("while_or_neq()");
+
+function while_or_less()
+{
+    var a = 0;
+    while (a < 1 || a < 1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("while_or_less()");
+
+function while_or_lesseq()
+{
+    var a = 0;
+    while (a <= 1 || a <= 1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("while_or_lesseq()");
+
+function while_and_eq()
+{
+    var a = 0;
+    while (a == 0 && a == 0)
+        return true;
+    return false;
+}
+
+shouldBeTrue("while_and_eq()");
+
+function while_and_neq()
+{
+    var a = 0;
+    while (a != 1 && a != 1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("while_and_neq()");
+
+function while_and_less()
+{
+    var a = 0;
+    while (a < 1 && a < 1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("while_and_less()");
+
+function while_and_lesseq()
+{
+    var a = 0;
+    while (a <= 1 && a <= 1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("while_and_lesseq()");
+
+function for_or_eq()
+{
+    for (var a = 0; a == 0 || a == 0; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("for_or_eq()");
+
+function for_or_neq()
+{
+    for (var a = 0; a != 1 || a != 1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("for_or_neq()");
+
+function for_or_less()
+{
+    for (var a = 0; a < 1 || a < 1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("for_or_less()");
+
+function for_or_lesseq()
+{
+    for (var a = 0; a <= 1 || a <= 1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("for_or_lesseq()");
+
+function for_and_eq()
+{
+    for (var a = 0; a == 0 && a == 0; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("for_and_eq()");
+
+function for_and_neq()
+{
+    for (var a = 0; a != 1 && a != 1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("for_and_neq()");
+
+function for_and_less()
+{
+    for (var a = 0; a < 1 && a < 1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("for_and_less()");
+
+function for_and_lesseq()
+{
+    for (var a = 0; a <= 1 && a <= 1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("for_and_lesseq()");
+
+function dowhile_or_eq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (a == 0 || a == 0)
+    return false;
+}
+
+shouldBeTrue("dowhile_or_eq()");
+
+function dowhile_or_neq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (a != 1 || a != 1)
+    return false;
+}
+
+shouldBeTrue("dowhile_or_neq()");
+
+function dowhile_or_less()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (a < 1 || a < 1)
+    return false;
+}
+
+shouldBeTrue("dowhile_or_less()");
+
+function dowhile_or_lesseq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (a <= 1 || a <= 1)
+    return false;
+}
+
+shouldBeTrue("dowhile_or_lesseq()");
+
+function dowhile_and_eq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (a == 0 && a == 0)
+    return false;
+}
+
+shouldBeTrue("dowhile_and_eq()");
+
+function dowhile_and_neq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (a != 1 && a != 1)
+    return false;
+}
+
+shouldBeTrue("dowhile_and_neq()");
+
+function dowhile_and_less()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (a < 1 && a < 1)
+    return false;
+}
+
+shouldBeTrue("dowhile_and_less()");
+
+function dowhile_and_lesseq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (a <= 1 && a <= 1)
+    return false;
+}
+
+shouldBeTrue("dowhile_and_lesseq()");
+
+function while_not_or_eq()
+{
+    var a = 0;
+    while (!(a == 0 || a == 0))
+        return true;
+    return false;
+}
+
+shouldBeFalse("while_not_or_eq()");
+
+function while_not_or_neq()
+{
+    var a = 0;
+    while (!(a != 1 || a != 1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("while_not_or_neq()");
+
+function while_not_or_less()
+{
+    var a = 0;
+    while (!(a < 1 || a < 1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("while_not_or_less()");
+
+function while_not_or_lesseq()
+{
+    var a = 0;
+    while (!(a <= 1 || a <= 1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("while_not_or_lesseq()");
+
+function while_not_and_eq()
+{
+    var a = 0;
+    while (!(a == 0 && a == 0))
+        return true;
+    return false;
+}
+
+shouldBeFalse("while_not_and_eq()");
+
+function while_not_and_neq()
+{
+    var a = 0;
+    while (!(a != 1 && a != 1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("while_not_and_neq()");
+
+function while_not_and_less()
+{
+    var a = 0;
+    while (!(a < 1 && a < 1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("while_not_and_less()");
+
+function while_not_and_lesseq()
+{
+    var a = 0;
+    while (!(a <= 1 && a <= 1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("while_not_and_lesseq()");
+
+function for_not_or_eq()
+{
+    for (var a = 0; !(a == 0 || a == 0); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("for_not_or_eq()");
+
+function for_not_or_neq()
+{
+    for (var a = 0; !(a != 1 || a != 1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("for_not_or_neq()");
+
+function for_not_or_less()
+{
+    for (var a = 0; !(a < 1 || a < 1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("for_not_or_less()");
+
+function for_not_or_lesseq()
+{
+    for (var a = 0; !(a <= 1 || a <= 1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("for_not_or_lesseq()");
+
+function for_not_and_eq()
+{
+    for (var a = 0; !(a == 0 && a == 0); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("for_not_and_eq()");
+
+function for_not_and_neq()
+{
+    for (var a = 0; !(a != 1 && a != 1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("for_not_and_neq()");
+
+function for_not_and_less()
+{
+    for (var a = 0; !(a < 1 && a < 1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("for_not_and_less()");
+
+function for_not_and_lesseq()
+{
+    for (var a = 0; !(a <= 1 && a <= 1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("for_not_and_lesseq()");
+
+function dowhile_not_or_eq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (!(a == 0 || a == 0))
+    return false;
+}
+
+shouldBeFalse("dowhile_not_or_eq()");
+
+function dowhile_not_or_neq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (!(a != 1 || a != 1))
+    return false;
+}
+
+shouldBeFalse("dowhile_not_or_neq()");
+
+function dowhile_not_or_less()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (!(a < 1 || a < 1))
+    return false;
+}
+
+shouldBeFalse("dowhile_not_or_less()");
+
+function dowhile_not_or_lesseq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (!(a <= 1 || a <= 1))
+    return false;
+}
+
+shouldBeFalse("dowhile_not_or_lesseq()");
+
+function dowhile_not_and_eq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (!(a == 0 && a == 0))
+    return false;
+}
+
+shouldBeFalse("dowhile_not_and_eq()");
+
+function dowhile_not_and_neq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (!(a != 1 && a != 1))
+    return false;
+}
+
+shouldBeFalse("dowhile_not_and_neq()");
+
+function dowhile_not_and_less()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (!(a < 1 && a < 1))
+    return false;
+}
+
+shouldBeFalse("dowhile_not_and_less()");
+
+function dowhile_not_and_lesseq()
+{
+    var a = 0;
+    var i = 0;
+    do {
+        if (i > 0)
+            return true;
+        i++;
+    } while (!(a <= 1 && a <= 1))
+    return false;
+}
+
+shouldBeFalse("dowhile_not_and_lesseq()");
+
+function float_while_or_eq()
+{
+    var a = 0.1;
+    while (a == 0.1 || a == 0.1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_while_or_eq()");
+
+function float_while_or_neq()
+{
+    var a = 0.1;
+    while (a != 1.1 || a != 1.1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_while_or_neq()");
+
+function float_while_or_less()
+{
+    var a = 0.1;
+    while (a < 1.1 || a < 1.1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_while_or_less()");
+
+function float_while_or_lesseq()
+{
+    var a = 0.1;
+    while (a <= 1.1 || a <= 1.1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_while_or_lesseq()");
+
+function float_while_and_eq()
+{
+    var a = 0.1;
+    while (a == 0.1 && a == 0.1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_while_and_eq()");
+
+function float_while_and_neq()
+{
+    var a = 0.1;
+    while (a != 1.1 && a != 1.1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_while_and_neq()");
+
+function float_while_and_less()
+{
+    var a = 0.1;
+    while (a < 1.1 && a < 1.1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_while_and_less()");
+
+function float_while_and_lesseq()
+{
+    var a = 0.1;
+    while (a <= 1.1 && a <= 1.1)
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_while_and_lesseq()");
+
+function float_for_or_eq()
+{
+    for (var a = 0.1; a == 0.1 || a == 0.1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_for_or_eq()");
+
+function float_for_or_neq()
+{
+    for (var a = 0.1; a != 1.1 || a != 1.1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_for_or_neq()");
+
+function float_for_or_less()
+{
+    for (var a = 0.1; a < 1.1 || a < 1.1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_for_or_less()");
+
+function float_for_or_lesseq()
+{
+    for (var a = 0.1; a <= 1.1 || a <= 1.1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_for_or_lesseq()");
+
+function float_for_and_eq()
+{
+    for (var a = 0.1; a == 0.1 && a == 0.1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_for_and_eq()");
+
+function float_for_and_neq()
+{
+    for (var a = 0.1; a != 1.1 && a != 1.1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_for_and_neq()");
+
+function float_for_and_less()
+{
+    for (var a = 0.1; a < 1.1 && a < 1.1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_for_and_less()");
+
+function float_for_and_lesseq()
+{
+    for (var a = 0.1; a <= 1.1 && a <= 1.1; )
+        return true;
+    return false;
+}
+
+shouldBeTrue("float_for_and_lesseq()");
+
+function float_dowhile_or_eq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (a == 0.1 || a == 0.1)
+    return false;
+}
+
+shouldBeTrue("float_dowhile_or_eq()");
+
+function float_dowhile_or_neq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (a != 1.1 || a != 1.1)
+    return false;
+}
+
+shouldBeTrue("float_dowhile_or_neq()");
+
+function float_dowhile_or_less()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (a < 1.1 || a < 1.1)
+    return false;
+}
+
+shouldBeTrue("float_dowhile_or_less()");
+
+function float_dowhile_or_lesseq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (a <= 1.1 || a <= 1.1)
+    return false;
+}
+
+shouldBeTrue("float_dowhile_or_lesseq()");
+
+function float_dowhile_and_eq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (a == 0.1 && a == 0.1)
+    return false;
+}
+
+shouldBeTrue("float_dowhile_and_eq()");
+
+function float_dowhile_and_neq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (a != 1.1 && a != 1.1)
+    return false;
+}
+
+shouldBeTrue("float_dowhile_and_neq()");
+
+function float_dowhile_and_less()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (a < 1.1 && a < 1.1)
+    return false;
+}
+
+shouldBeTrue("float_dowhile_and_less()");
+
+function float_dowhile_and_lesseq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (a <= 1.1 && a <= 1.1)
+    return false;
+}
+
+shouldBeTrue("float_dowhile_and_lesseq()");
+
+function float_while_not_or_eq()
+{
+    var a = 0.1;
+    while (!(a == 0.1 || a == 0.1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_while_not_or_eq()");
+
+function float_while_not_or_neq()
+{
+    var a = 0.1;
+    while (!(a != 1.1 || a != 1.1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_while_not_or_neq()");
+
+function float_while_not_or_less()
+{
+    var a = 0.1;
+    while (!(a < 1.1 || a < 1.1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_while_not_or_less()");
+
+function float_while_not_or_lesseq()
+{
+    var a = 0.1;
+    while (!(a <= 1.1 || a <= 1.1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_while_not_or_lesseq()");
+
+function float_while_not_and_eq()
+{
+    var a = 0.1;
+    while (!(a == 0.1 && a == 0.1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_while_not_and_eq()");
+
+function float_while_not_and_neq()
+{
+    var a = 0.1;
+    while (!(a != 1.1 && a != 1.1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_while_not_and_neq()");
+
+function float_while_not_and_less()
+{
+    var a = 0.1;
+    while (!(a < 1.1 && a < 1.1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_while_not_and_less()");
+
+function float_while_not_and_lesseq()
+{
+    var a = 0.1;
+    while (!(a <= 1.1 && a <= 1.1))
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_while_not_and_lesseq()");
+
+function float_for_not_or_eq()
+{
+    for (var a = 0.1; !(a == 0.1 || a == 0.1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_for_not_or_eq()");
+
+function float_for_not_or_neq()
+{
+    for (var a = 0.1; !(a != 1.1 || a != 1.1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_for_not_or_neq()");
+
+function float_for_not_or_less()
+{
+    for (var a = 0.1; !(a < 1.1 || a < 1.1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_for_not_or_less()");
+
+function float_for_not_or_lesseq()
+{
+    for (var a = 0.1; !(a <= 1.1 || a <= 1.1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_for_not_or_lesseq()");
+
+function float_for_not_and_eq()
+{
+    for (var a = 0.1; !(a == 0.1 && a == 0.1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_for_not_and_eq()");
+
+function float_for_not_and_neq()
+{
+    for (var a = 0.1; !(a != 1.1 && a != 1.1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_for_not_and_neq()");
+
+function float_for_not_and_less()
+{
+    for (var a = 0.1; !(a < 1.1 && a < 1.1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_for_not_and_less()");
+
+function float_for_not_and_lesseq()
+{
+    for (var a = 0.1; !(a <= 1.1 && a <= 1.1); )
+        return true;
+    return false;
+}
+
+shouldBeFalse("float_for_not_and_lesseq()");
+
+function float_dowhile_not_or_eq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (!(a == 0.1 || a == 0.1))
+    return false;
+}
+
+shouldBeFalse("float_dowhile_not_or_eq()");
+
+function float_dowhile_not_or_neq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (!(a != 1.1 || a != 1.1))
+    return false;
+}
+
+shouldBeFalse("float_dowhile_not_or_neq()");
+
+function float_dowhile_not_or_less()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (!(a < 1.1 || a < 1.1))
+    return false;
+}
+
+shouldBeFalse("float_dowhile_not_or_less()");
+
+function float_dowhile_not_or_lesseq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (!(a <= 1.1 || a <= 1.1))
+    return false;
+}
+
+shouldBeFalse("float_dowhile_not_or_lesseq()");
+
+function float_dowhile_not_and_eq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (!(a == 0.1 && a == 0.1))
+    return false;
+}
+
+shouldBeFalse("float_dowhile_not_and_eq()");
+
+function float_dowhile_not_and_neq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (!(a != 1.1 && a != 1.1))
+    return false;
+}
+
+shouldBeFalse("float_dowhile_not_and_neq()");
+
+function float_dowhile_not_and_less()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (!(a < 1.1 && a < 1.1))
+    return false;
+}
+
+shouldBeFalse("float_dowhile_not_and_less()");
+
+function float_dowhile_not_and_lesseq()
+{
+    var a = 0.1;
+    var i = 0.1;
+    do {
+        if (i > 0.1)
+            return true;
+        i++;
+    } while (!(a <= 1.1 && a <= 1.1))
+    return false;
+}
diff --git a/test/webkit/codegen-peephole-locals-expected.txt b/test/webkit/codegen-peephole-locals-expected.txt
new file mode 100644 (file)
index 0000000..77c220b
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests whether peephole optimizations on bytecode properly deal with local registers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS if_less_test() is true
+PASS if_else_less_test() is true
+PASS conditional_less_test() is true
+PASS logical_and_less_test() is true
+PASS logical_or_less_test() is true
+PASS do_while_less_test() is true
+PASS while_less_test() is true
+PASS for_less_test() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/codegen-peephole-locals.js b/test/webkit/codegen-peephole-locals.js
new file mode 100644 (file)
index 0000000..0fe6039
--- /dev/null
@@ -0,0 +1,106 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests whether peephole optimizations on bytecode properly deal with local registers."
+);
+
+function if_less_test()
+{
+    var a = 0;
+    var b = 2;
+    if (a = 1 < 2)
+        return a == 1;
+}
+
+shouldBeTrue("if_less_test()");
+
+function if_else_less_test()
+{
+    var a = 0;
+    var b = 2;
+    if (a = 1 < 2)
+        return a == 1;
+    else
+        return false;
+}
+
+shouldBeTrue("if_else_less_test()");
+
+function conditional_less_test()
+{
+    var a = 0;
+    var b = 2;
+    return (a = 1 < 2) ? a == 1 : false;
+}
+
+shouldBeTrue("conditional_less_test()");
+
+function logical_and_less_test()
+{
+    var a = 0;
+    var b = 2;
+    return (a = 1 < 2) && a == 1;
+}
+
+shouldBeTrue("logical_and_less_test()");
+
+function logical_or_less_test()
+{
+    var a = 0;
+    var b = 2;
+    var result = (a = 1 < 2) || a == 1;
+    return a == 1;
+}
+
+shouldBeTrue("logical_or_less_test()");
+
+function do_while_less_test()
+{
+    var a = 0;
+    var count = 0;
+    do {
+        if (count == 1)
+            return a == 1;
+        count++;
+    } while (a = 1 < 2)
+}
+
+shouldBeTrue("do_while_less_test()");
+
+function while_less_test()
+{
+    var a = 0;
+    while (a = 1 < 2)
+        return a == 1;
+}
+
+shouldBeTrue("while_less_test()");
+
+function for_less_test()
+{
+    for (var a = 0; a = 1 < 2; )
+        return a == 1;
+}
+
+shouldBeTrue("for_less_test()");
diff --git a/test/webkit/codegen-temporaries-expected.txt b/test/webkit/codegen-temporaries-expected.txt
new file mode 100644 (file)
index 0000000..ecb7d79
--- /dev/null
@@ -0,0 +1,139 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests whether bytecode codegen properly handles temporaries.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS a is true
+PASS b is false
+PASS assign_test1() is 'PASS'
+PASS assign_test2() is 'PASS'
+PASS assign_test3() is 'PASS'
+PASS testObject4.test is 'PASS'
+PASS testObject5.test is 'PASS'
+PASS assign_test6() is 'PASS'
+PASS assign_test7() is 'PASS'
+PASS assign_test8() is 'PASS'
+PASS assign_test9() is 'PASS'
+PASS testObject10.test is 'PASS'
+PASS assign_test11() is 'PASS'
+PASS assign_test12() is 'PASS'
+PASS assign_test13() is 'PASS'
+PASS assign_test14() is 'PASS'
+PASS assign_test15() is 'PASS'
+PASS assign_test16() is 2
+PASS a17 is 3
+PASS assign_test18() is 3
+PASS a19.b is 3
+PASS assign_test20() is 3
+PASS a21['b'] is 3
+PASS assign_test22() is 3
+PASS assign_test23() is 3
+PASS assign_test24() is 3
+PASS assign_test25() is 3
+PASS assign_test26() is 3
+PASS assign_test27() is 3
+PASS assign_test28() is 3
+PASS assign_test29() is 3
+PASS assign_test30() is 'fooNaN'
+PASS assign_test31() is 'PASS'
+PASS bracket_test1() is -1
+PASS bracket_test2() is 1
+PASS bracket_test3() is 0
+PASS bracket_test4() is 0
+PASS bracket_test5() is 1
+PASS bracket_test6() is 1
+PASS mult_test1() is 2
+PASS mult_test2() is 2
+PASS mult_test3() is 2
+PASS div_test1() is 0.5
+PASS div_test2() is 0.5
+PASS div_test3() is 0.5
+PASS mod_test1() is 1
+PASS mod_test2() is 1
+PASS mod_test3() is 1
+PASS add_test1() is 3
+PASS add_test2() is 3
+PASS add_test3() is 3
+PASS sub_test1() is -1
+PASS sub_test2() is -1
+PASS sub_test3() is -1
+PASS lshift_test1() is 4
+PASS lshift_test2() is 4
+PASS lshift_test3() is 4
+PASS rshift_test1() is 1
+PASS rshift_test2() is 1
+PASS rshift_test3() is 1
+PASS urshift_test1() is 1
+PASS urshift_test2() is 1
+PASS urshift_test3() is 1
+PASS less_test1() is true
+PASS less_test2() is true
+PASS less_test3() is true
+PASS greater_test1() is true
+PASS greater_test2() is true
+PASS greater_test3() is true
+PASS lesseq_test1() is true
+PASS lesseq_test2() is true
+PASS lesseq_test3() is true
+PASS greatereq_test1() is true
+PASS greatereq_test2() is true
+PASS greatereq_test3() is true
+PASS instanceof_test1() is true
+PASS instanceof_test2() is true
+PASS instanceof_test3() is true
+PASS in_test1() is true
+PASS in_test2() is true
+PASS in_test3() is true
+PASS eq_test1() is false
+PASS eq_test2() is false
+PASS eq_test3() is false
+PASS neq_test1() is true
+PASS neq_test2() is true
+PASS neq_test3() is true
+PASS stricteq_test1() is false
+PASS stricteq_test2() is false
+PASS stricteq_test3() is false
+PASS nstricteq_test1() is true
+PASS nstricteq_test2() is true
+PASS nstricteq_test3() is true
+PASS bitand_test1() is 0
+PASS bitand_test2() is 0
+PASS bitand_test3() is 0
+PASS bitor_test1() is 3
+PASS bitor_test2() is 3
+PASS bitor_test3() is 3
+PASS bitxor_test1() is 3
+PASS bitxor_test2() is 3
+PASS bitxor_test3() is 3
+PASS switch_test1() is true
+PASS switch_test2() is true
+PASS switch_test3() is true
+PASS construct_test() is true
+PASS [(0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), (0/0), ].length is 64
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/codegen-temporaries.js b/test/webkit/codegen-temporaries.js
new file mode 100644 (file)
index 0000000..55e5162
--- /dev/null
@@ -0,0 +1,955 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests whether bytecode codegen properly handles temporaries.'
+);
+
+var a = true;
+a = false || a;
+shouldBeTrue("a");
+
+var b = false;
+b = true && b;
+shouldBeFalse("b");
+
+function TestObject() {
+    this.toString = function() { return this.test; }
+    this.test = "FAIL";
+    return this;
+}
+
+function assign_test1()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a.test = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test1()", "'PASS'");
+
+function assign_test2()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a = a.test = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test2()", "'PASS'");
+
+function assign_test3()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a.test = a = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test3()", "'PASS'");
+
+var testObject4 = new TestObject;
+var a4 = testObject4;
+a4.test = this.a4 = "PASS";
+
+shouldBe("testObject4.test", "'PASS'");
+
+var testObject5 = new TestObject;
+var a5 = testObject5;
+a5 = this.a5.test = "PASS";
+
+shouldBe("testObject5.test", "'PASS'");
+
+function assign_test6()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a["test"] = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test6()", "'PASS'");
+
+function assign_test7()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a = a["test"] = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test7()", "'PASS'");
+
+function assign_test8()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a["test"] = a = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test8()", "'PASS'");
+
+function assign_test9()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a["test"] = this.a = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test9()", "'PASS'");
+
+var testObject10 = new TestObject;
+var a10 = testObject10;
+a10 = this.a10["test"] = "PASS";
+
+shouldBe("testObject10.test", "'PASS'");
+
+function assign_test11()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a[a = "test"] = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test11()", "'PASS'");
+
+function assign_test12()
+{
+    var test = "test";
+    var testObject = new TestObject;
+    var a = testObject;
+    a[test] = "PASS";
+    return testObject.test;
+}
+
+shouldBe("assign_test12()", "'PASS'");
+
+function assign_test13()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a.test = (a = "FAIL", "PASS");
+    return testObject.test;
+}
+
+shouldBe("assign_test13()", "'PASS'");
+
+function assign_test14()
+{
+    var testObject = new TestObject;
+    var a = testObject;
+    a["test"] = (a = "FAIL", "PASS");
+    return testObject.test;
+}
+
+shouldBe("assign_test14()", "'PASS'");
+
+function assign_test15()
+{
+    var test = "test";
+    var testObject = new TestObject;
+    var a = testObject;
+    a[test] = (test = "FAIL", "PASS");
+    return testObject.test;
+}
+
+shouldBe("assign_test15()", "'PASS'");
+
+function assign_test16()
+{
+    var a = 1;
+    a = (a = 2);
+    return a;
+}
+
+shouldBe("assign_test16()", "2");
+
+var a17 = 1;
+a17 += (a17 += 1);
+
+shouldBe("a17", "3");
+
+function assign_test18()
+{
+    var a = 1;
+    a += (a += 1);
+    return a;
+}
+
+shouldBe("assign_test18()", "3");
+
+var a19 = { b: 1 };
+a19.b += (a19.b += 1);
+
+shouldBe("a19.b", "3");
+
+function assign_test20()
+{
+    var a = { b: 1 };
+    a.b += (a.b += 1);
+    return a.b;
+}
+
+shouldBe("assign_test20()", "3");
+
+var a21 = { b: 1 };
+a21["b"] += (a21["b"] += 1);
+
+shouldBe("a21['b']", "3");
+
+function assign_test22()
+{
+    var a = { b: 1 };
+    a["b"] += (a["b"] += 1);
+    return a["b"];
+}
+
+shouldBe("assign_test22()", "3");
+
+function assign_test23()
+{
+    var o = { b: 1 };
+    var a = o;
+    a.b += a = 2;
+    return o.b;
+}
+
+shouldBe("assign_test23()", "3");
+
+function assign_test24()
+{
+    var o = { b: 1 };
+    var a = o;
+    a["b"] += a = 2;
+    return o["b"];
+}
+
+shouldBe("assign_test24()", "3");
+
+function assign_test25()
+{
+    var o = { b: 1 };
+    var a = o;
+    a[a = "b"] += a = 2;
+    return o["b"];
+}
+
+shouldBe("assign_test25()", "3");
+
+function assign_test26()
+{
+    var o = { b: 1 };
+    var a = o;
+    var b = "b";
+    a[b] += a = 2;
+    return o["b"];
+}
+
+shouldBe("assign_test26()", "3");
+
+function assign_test27()
+{
+    var o = { b: 1 };
+    var a = o;
+    a.b += (a = 100, 2);
+    return o.b;
+}
+
+shouldBe("assign_test27()", "3");
+
+function assign_test28()
+{
+    var o = { b: 1 };
+    var a = o;
+    a["b"] += (a = 100, 2);
+    return o["b"];
+}
+
+shouldBe("assign_test28()", "3");
+
+function assign_test29()
+{
+    var o = { b: 1 };
+    var a = o;
+    var b = "b";
+    a[b] += (a = 100, 2);
+    return o["b"];
+}
+
+shouldBe("assign_test29()", "3");
+
+function assign_test30()
+{
+    var a = "foo";
+    a += (a++);
+    return a;
+}
+
+shouldBe("assign_test30()", "'fooNaN'");
+
+function assign_test31()
+{
+    function result() { return "PASS"; }
+    return (globalVar = result)()
+}
+
+shouldBe("assign_test31()", "'PASS'");
+
+function bracket_test1()
+{
+    var o = [-1];
+    var a = o[++o];
+    return a;
+}
+
+shouldBe("bracket_test1()", "-1");
+
+function bracket_test2()
+{
+    var o = [1];
+    var a = o[--o];
+    return a;
+}
+
+shouldBe("bracket_test2()", "1");
+
+function bracket_test3()
+{
+    var o = [0];
+    var a = o[o++];
+    return a;
+}
+
+shouldBe("bracket_test3()", "0");
+
+function bracket_test4()
+{
+    var o = [0];
+    var a = o[o--];
+    return a;
+}
+
+shouldBe("bracket_test4()", "0");
+
+function bracket_test5()
+{
+    var o = [1];
+    var a = o[o ^= 1];
+    return a;
+}
+
+shouldBe("bracket_test5()", "1");
+
+function bracket_test6()
+{
+    var o = { b: 1 }
+    var b = o[o = { b: 2 }, "b"];
+    return b;
+}
+
+shouldBe("bracket_test6()", "1");
+
+function mult_test1()
+{
+    var a = 1;
+    return a * (a = 2);
+}
+
+shouldBe("mult_test1()", "2");
+
+function mult_test2()
+{
+    var a = 1;
+    return a * ++a;
+}
+
+shouldBe("mult_test2()", "2");
+
+function mult_test3()
+{
+    var a = 1;
+    return a * (a += 1);
+}
+
+shouldBe("mult_test3()", "2");
+
+function div_test1()
+{
+    var a = 1;
+    return a / (a = 2);
+}
+
+shouldBe("div_test1()", "0.5");
+
+function div_test2()
+{
+    var a = 1;
+    return a / ++a;
+}
+
+shouldBe("div_test2()", "0.5");
+
+function div_test3()
+{
+    var a = 1;
+    return a / (a += 1);
+}
+
+shouldBe("div_test3()", "0.5");
+
+function mod_test1()
+{
+    var a = 1;
+    return a % (a = 2);
+}
+
+shouldBe("mod_test1()", "1");
+
+function mod_test2()
+{
+    var a = 1;
+    return a % ++a;
+}
+
+shouldBe("mod_test2()", "1");
+
+function mod_test3()
+{
+    var a = 1;
+    return a % (a += 1);
+}
+
+shouldBe("mod_test3()", "1");
+
+function add_test1()
+{
+    var a = 1;
+    return a + (a = 2);
+}
+
+shouldBe("add_test1()", "3");
+
+function add_test2()
+{
+    var a = 1;
+    return a + ++a;
+}
+
+shouldBe("add_test2()", "3");
+
+function add_test3()
+{
+    var a = 1;
+    return a + (a += 1);
+}
+
+shouldBe("add_test3()", "3");
+
+function sub_test1()
+{
+    var a = 1;
+    return a - (a = 2);
+}
+
+shouldBe("sub_test1()", "-1");
+
+function sub_test2()
+{
+    var a = 1;
+    return a - ++a;
+}
+
+shouldBe("sub_test2()", "-1");
+
+function sub_test3()
+{
+    var a = 1;
+    return a - (a += 1);
+}
+
+shouldBe("sub_test3()", "-1");
+
+function lshift_test1()
+{
+    var a = 1;
+    return a << (a = 2);
+}
+
+shouldBe("lshift_test1()", "4");
+
+function lshift_test2()
+{
+    var a = 1;
+    return a << ++a;
+}
+
+shouldBe("lshift_test2()", "4");
+
+function lshift_test3()
+{
+    var a = 1;
+    return a << (a += 1);
+}
+
+shouldBe("lshift_test3()", "4");
+
+function rshift_test1()
+{
+    var a = 4;
+    return a >> (a = 2);
+}
+
+shouldBe("rshift_test1()", "1");
+
+function rshift_test2()
+{
+    var a = 2;
+    return a >> --a;
+}
+
+shouldBe("rshift_test2()", "1");
+
+function rshift_test3()
+{
+    var a = 2;
+    return a >> (a -= 1);
+}
+
+shouldBe("rshift_test3()", "1");
+
+function urshift_test1()
+{
+    var a = 4;
+    return a >>> (a = 2);
+}
+
+shouldBe("urshift_test1()", "1");
+
+function urshift_test2()
+{
+    var a = 2;
+    return a >>> --a;
+}
+
+shouldBe("urshift_test2()", "1");
+
+function urshift_test3()
+{
+    var a = 2;
+    return a >>> (a -= 1);
+}
+
+shouldBe("urshift_test3()", "1");
+
+function less_test1()
+{
+    var a = 1;
+    return a < (a = 2);
+}
+
+shouldBeTrue("less_test1()");
+
+function less_test2()
+{
+    var a = 1;
+    return a < ++a;
+}
+
+shouldBeTrue("less_test2()");
+
+function less_test3()
+{
+    var a = 1;
+    return a < (a += 1);
+}
+
+shouldBeTrue("less_test3()");
+
+function greater_test1()
+{
+    var a = 2;
+    return a > (a = 1);
+}
+
+shouldBeTrue("greater_test1()");
+
+function greater_test2()
+{
+    var a = 2;
+    return a > --a;
+}
+
+shouldBeTrue("greater_test2()");
+
+function greater_test3()
+{
+    var a = 2;
+    return a > (a -= 1);
+}
+
+shouldBeTrue("greater_test3()");
+
+function lesseq_test1()
+{
+    var a = 1;
+    return a <= (a = 3, 2);
+}
+
+shouldBeTrue("lesseq_test1()");
+
+function lesseq_test2()
+{
+    var a = 1;
+    return a <= (++a, 1);
+}
+
+shouldBeTrue("lesseq_test2()");
+
+function lesseq_test3()
+{
+    var a = 1;
+    return a <= (a += 1, 1);
+}
+
+shouldBeTrue("lesseq_test3()");
+
+function greatereq_test1()
+{
+    var a = 2;
+    return a >= (a = 1, 2);
+}
+
+shouldBeTrue("greatereq_test1()");
+
+function greatereq_test2()
+{
+    var a = 2;
+    return a >= (--a, 2);
+}
+
+shouldBeTrue("greatereq_test2()");
+
+function greatereq_test3()
+{
+    var a = 2;
+    return a >= (a -= 1, 2);
+}
+
+shouldBeTrue("greatereq_test3()");
+
+function instanceof_test1()
+{
+    var a = { };
+    return a instanceof (a = 1, Object);
+}
+
+shouldBeTrue("instanceof_test1()");
+
+function instanceof_test2()
+{
+    var a = { valueOf: function() { return 1; } };
+    return a instanceof (++a, Object);
+}
+
+shouldBeTrue("instanceof_test2()");
+
+function instanceof_test3()
+{
+    var a = { valueOf: function() { return 1; } };
+    return a instanceof (a += 1, Object);
+}
+
+shouldBeTrue("instanceof_test3()");
+
+function in_test1()
+{
+    var a = "a";
+    return a in (a = "b", { a: 1 });
+}
+
+shouldBeTrue("in_test1()");
+
+function in_test2()
+{
+    var a = { toString: function() { return "a"; }, valueOf: function() { return 1; } };
+    return a in (++a, { a: 1 });
+}
+
+shouldBeTrue("in_test2()");
+
+function in_test3()
+{
+    var a = { toString: function() { return "a"; }, valueOf: function() { return 1; } };
+    return a in (a += 1, { a: 1 });
+}
+
+shouldBeTrue("in_test3()");
+
+function eq_test1()
+{
+    var a = 1;
+    return a == (a = 2);
+}
+
+shouldBeFalse("eq_test1()");
+
+function eq_test2()
+{
+    var a = 1;
+    return a == ++a;
+}
+
+shouldBeFalse("eq_test2()");
+
+function eq_test3()
+{
+    var a = 1;
+    return a == (a += 1);
+}
+
+shouldBeFalse("eq_test3()");
+
+function neq_test1()
+{
+    var a = 1;
+    return a != (a = 2);
+}
+
+shouldBeTrue("neq_test1()");
+
+function neq_test2()
+{
+    var a = 1;
+    return a != ++a;
+}
+
+shouldBeTrue("neq_test2()");
+
+function neq_test3()
+{
+    var a = 1;
+    return a != (a += 1);
+}
+
+shouldBeTrue("neq_test3()");
+
+function stricteq_test1()
+{
+    var a = 1;
+    return a === (a = 2);
+}
+
+shouldBeFalse("stricteq_test1()");
+
+function stricteq_test2()
+{
+    var a = 1;
+    return a === ++a;
+}
+
+shouldBeFalse("stricteq_test2()");
+
+function stricteq_test3()
+{
+    var a = 1;
+    return a === (a += 1);
+}
+
+shouldBeFalse("stricteq_test3()");
+
+function nstricteq_test1()
+{
+    var a = 1;
+    return a !== (a = 2);
+}
+
+shouldBeTrue("nstricteq_test1()");
+
+function nstricteq_test2()
+{
+    var a = 1;
+    return a !== ++a;
+}
+
+shouldBeTrue("nstricteq_test2()");
+
+function nstricteq_test3()
+{
+    var a = 1;
+    return a !== (a += 1);
+}
+
+shouldBeTrue("nstricteq_test3()");
+
+function bitand_test1()
+{
+    var a = 1;
+    return a & (a = 2);
+}
+
+shouldBe("bitand_test1()", "0");
+
+function bitand_test2()
+{
+    var a = 1;
+    return a & ++a;
+}
+
+shouldBe("bitand_test2()", "0");
+
+function bitand_test3()
+{
+    var a = 1;
+    return a & (a += 1);
+}
+
+shouldBe("bitand_test3()", "0");
+
+function bitor_test1()
+{
+    var a = 1;
+    return a | (a = 2);
+}
+
+shouldBe("bitor_test1()", "3");
+
+function bitor_test2()
+{
+    var a = 1;
+    return a | ++a;
+}
+
+shouldBe("bitor_test2()", "3");
+
+function bitor_test3()
+{
+    var a = 1;
+    return a | (a += 1);
+}
+
+shouldBe("bitor_test3()", "3");
+
+function bitxor_test1()
+{
+    var a = 1;
+    return a ^ (a = 2);
+}
+
+shouldBe("bitxor_test1()", "3");
+
+function bitxor_test2()
+{
+    var a = 1;
+    return a ^ ++a;
+}
+
+shouldBe("bitxor_test2()", "3");
+
+function bitxor_test3()
+{
+    var a = 1;
+    return a ^ (a += 1);
+}
+
+shouldBe("bitxor_test3()", "3");
+
+function switch_test1_helper(a, b)
+{
+    switch (a) {
+    case b:
+        break;
+    default:
+        break;
+    }
+
+    return b;
+}
+
+function switch_test1()
+{
+    return switch_test1_helper(0, 1) == 1;
+}
+
+shouldBeTrue("switch_test1()");
+
+function switch_test2_helper(a, b)
+{
+    var c = b;
+    switch (a) {
+    case c:
+        break;
+    default:
+        break;
+    }
+
+    return c;
+}
+
+function switch_test2()
+{
+    return switch_test2_helper(0, 1) == 1;
+}
+
+shouldBeTrue("switch_test2()");
+
+function switch_test3_helper(a)
+{
+    switch (a) {
+    case this:
+        break;
+    default:
+        break;
+    }
+
+    return this;
+}
+
+function switch_test3()
+{
+    return this == switch_test3_helper.call(this, 0);
+}
+
+shouldBeTrue("switch_test3()");
+
+function construct_test()
+{
+    var c = [function(a) { this.a = a; }];
+
+    function f()
+    {
+        return new c[0](true);
+    }
+
+    return f().a;
+}
+
+shouldBeTrue("construct_test()");
+var testStr = "[";
+for (var i = 0; i < 64; i++)
+    testStr += "(0/0), ";
+testStr += "].length";
+shouldBe(testStr, "64");
diff --git a/test/webkit/comparison-operators-expected.txt b/test/webkit/comparison-operators-expected.txt
new file mode 100644 (file)
index 0000000..dd617db
--- /dev/null
@@ -0,0 +1,2816 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+test that comparison operators work correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS return ("a"=="b"); is false
+PASS if (("a"=="b")) return true; return false; is false
+PASS var k = 0; while (("a"=="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"=="b"); ) if (k++) return true; return false; is false
+PASS return ("a"!="b"); is true
+PASS if (("a"!="b")) return true; return false; is true
+PASS var k = 0; while (("a"!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="b"); ) if (k++) return true; return false; is true
+PASS return ("a"==="b"); is false
+PASS if (("a"==="b")) return true; return false; is false
+PASS var k = 0; while (("a"==="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"==="b"); ) if (k++) return true; return false; is false
+PASS return ("a"!=="b"); is true
+PASS if (("a"!=="b")) return true; return false; is true
+PASS var k = 0; while (("a"!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="b"); ) if (k++) return true; return false; is true
+PASS return ("a"=="b") || 1; is true
+PASS if (("a"=="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"=="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!="b") || 1; is true
+PASS if (("a"!="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==="b") || 1; is true
+PASS if (("a"==="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"==="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=="b") || 1; is true
+PASS if (("a"!=="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"=="b") && 1; is false
+PASS if (("a"=="b") && 1) return true; return false; is false
+PASS var k = 0; while (("a"=="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"=="b") && 1; ) if (k++) return true; return false; is false
+PASS return ("a"!="b") && 1; is true
+PASS if (("a"!="b") && 1) return true; return false; is true
+PASS var k = 0; while (("a"!="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="b") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"==="b") && 1; is false
+PASS if (("a"==="b") && 1) return true; return false; is false
+PASS var k = 0; while (("a"==="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"==="b") && 1; ) if (k++) return true; return false; is false
+PASS return ("a"!=="b") && 1; is true
+PASS if (("a"!=="b") && 1) return true; return false; is true
+PASS var k = 0; while (("a"!=="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="b") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"=="b") || 1; is true
+PASS if (("a"=="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"=="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!="b") || 1; is true
+PASS if (("a"!="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==="b") || 1; is true
+PASS if (("a"==="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"==="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=="b") || 1; is true
+PASS if (("a"!=="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"=="b"); is true
+PASS if (1 || ("a"=="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"=="b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!="b"); is true
+PASS if (1 || ("a"!="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!="b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"==="b"); is true
+PASS if (1 || ("a"==="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"==="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"==="b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!=="b"); is true
+PASS if (1 || ("a"!=="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!=="b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"=="b"); is false
+PASS if (1 && ("a"=="b")) return true; return false; is false
+PASS var k = 0; while (1 && ("a"=="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"=="b"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"!="b"); is true
+PASS if (1 && ("a"!="b")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"!="b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"==="b"); is false
+PASS if (1 && ("a"==="b")) return true; return false; is false
+PASS var k = 0; while (1 && ("a"==="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"==="b"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"!=="b"); is true
+PASS if (1 && ("a"!=="b")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"!=="b"); ) if (k++) return true; return false; is true
+PASS return ("a"=="a"); is true
+PASS if (("a"=="a")) return true; return false; is true
+PASS var k = 0; while (("a"=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"=="a"); ) if (k++) return true; return false; is true
+PASS return ("a"!="a"); is false
+PASS if (("a"!="a")) return true; return false; is false
+PASS var k = 0; while (("a"!="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!="a"); ) if (k++) return true; return false; is false
+PASS return ("a"==="a"); is true
+PASS if (("a"==="a")) return true; return false; is true
+PASS var k = 0; while (("a"==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==="a"); ) if (k++) return true; return false; is true
+PASS return ("a"!=="a"); is false
+PASS if (("a"!=="a")) return true; return false; is false
+PASS var k = 0; while (("a"!=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!=="a"); ) if (k++) return true; return false; is false
+PASS return ("a"=="a") || 1; is true
+PASS if (("a"=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!="a") || 1; is true
+PASS if (("a"!="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==="a") || 1; is true
+PASS if (("a"==="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=="a") || 1; is true
+PASS if (("a"!=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"=="a") && 1; is true
+PASS if (("a"=="a") && 1) return true; return false; is true
+PASS var k = 0; while (("a"=="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"=="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"!="a") && 1; is false
+PASS if (("a"!="a") && 1) return true; return false; is false
+PASS var k = 0; while (("a"!="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!="a") && 1; ) if (k++) return true; return false; is false
+PASS return ("a"==="a") && 1; is true
+PASS if (("a"==="a") && 1) return true; return false; is true
+PASS var k = 0; while (("a"==="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=="a") && 1; is false
+PASS if (("a"!=="a") && 1) return true; return false; is false
+PASS var k = 0; while (("a"!=="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!=="a") && 1; ) if (k++) return true; return false; is false
+PASS return ("a"=="a") || 1; is true
+PASS if (("a"=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!="a") || 1; is true
+PASS if (("a"!="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==="a") || 1; is true
+PASS if (("a"==="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=="a") || 1; is true
+PASS if (("a"!=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"=="a"); is true
+PASS if (1 || ("a"=="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"=="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!="a"); is true
+PASS if (1 || ("a"!="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"==="a"); is true
+PASS if (1 || ("a"==="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"==="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!=="a"); is true
+PASS if (1 || ("a"!=="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"=="a"); is true
+PASS if (1 && ("a"=="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"!="a"); is false
+PASS if (1 && ("a"!="a")) return true; return false; is false
+PASS var k = 0; while (1 && ("a"!="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"!="a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"==="a"); is true
+PASS if (1 && ("a"==="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"==="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"!=="a"); is false
+PASS if (1 && ("a"!=="a")) return true; return false; is false
+PASS var k = 0; while (1 && ("a"!=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"!=="a"); ) if (k++) return true; return false; is false
+PASS return ("b"=="a"); is false
+PASS if (("b"=="a")) return true; return false; is false
+PASS var k = 0; while (("b"=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"=="a"); ) if (k++) return true; return false; is false
+PASS return ("b"!="a"); is true
+PASS if (("b"!="a")) return true; return false; is true
+PASS var k = 0; while (("b"!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!="a"); ) if (k++) return true; return false; is true
+PASS return ("b"==="a"); is false
+PASS if (("b"==="a")) return true; return false; is false
+PASS var k = 0; while (("b"==="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"==="a"); ) if (k++) return true; return false; is false
+PASS return ("b"!=="a"); is true
+PASS if (("b"!=="a")) return true; return false; is true
+PASS var k = 0; while (("b"!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=="a"); ) if (k++) return true; return false; is true
+PASS return ("b"=="a") || 1; is true
+PASS if (("b"=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!="a") || 1; is true
+PASS if (("b"!="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"==="a") || 1; is true
+PASS if (("b"==="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"==="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!=="a") || 1; is true
+PASS if (("b"!=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"=="a") && 1; is false
+PASS if (("b"=="a") && 1) return true; return false; is false
+PASS var k = 0; while (("b"=="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"=="a") && 1; ) if (k++) return true; return false; is false
+PASS return ("b"!="a") && 1; is true
+PASS if (("b"!="a") && 1) return true; return false; is true
+PASS var k = 0; while (("b"!="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("b"==="a") && 1; is false
+PASS if (("b"==="a") && 1) return true; return false; is false
+PASS var k = 0; while (("b"==="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"==="a") && 1; ) if (k++) return true; return false; is false
+PASS return ("b"!=="a") && 1; is true
+PASS if (("b"!=="a") && 1) return true; return false; is true
+PASS var k = 0; while (("b"!=="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("b"=="a") || 1; is true
+PASS if (("b"=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!="a") || 1; is true
+PASS if (("b"!="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"==="a") || 1; is true
+PASS if (("b"==="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"==="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!=="a") || 1; is true
+PASS if (("b"!=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b"=="a"); is true
+PASS if (1 || ("b"=="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"=="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"!="a"); is true
+PASS if (1 || ("b"!="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"!="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"==="a"); is true
+PASS if (1 || ("b"==="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"==="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"!=="a"); is true
+PASS if (1 || ("b"!=="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"!=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"=="a"); is false
+PASS if (1 && ("b"=="a")) return true; return false; is false
+PASS var k = 0; while (1 && ("b"=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"=="a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"!="a"); is true
+PASS if (1 && ("b"!="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("b"!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b"!="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"==="a"); is false
+PASS if (1 && ("b"==="a")) return true; return false; is false
+PASS var k = 0; while (1 && ("b"==="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"==="a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"!=="a"); is true
+PASS if (1 && ("b"!=="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("b"!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b"!=="a"); ) if (k++) return true; return false; is true
+PASS return (letterA=="b"); is false
+PASS if ((letterA=="b")) return true; return false; is false
+PASS var k = 0; while ((letterA=="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA=="b"); ) if (k++) return true; return false; is false
+PASS return (letterA!="b"); is true
+PASS if ((letterA!="b")) return true; return false; is true
+PASS var k = 0; while ((letterA!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="b"); ) if (k++) return true; return false; is true
+PASS return (letterA==="b"); is false
+PASS if ((letterA==="b")) return true; return false; is false
+PASS var k = 0; while ((letterA==="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA==="b"); ) if (k++) return true; return false; is false
+PASS return (letterA!=="b"); is true
+PASS if ((letterA!=="b")) return true; return false; is true
+PASS var k = 0; while ((letterA!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="b"); ) if (k++) return true; return false; is true
+PASS return (letterA=="b") || 1; is true
+PASS if ((letterA=="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="b") || 1; is true
+PASS if ((letterA!="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="b") || 1; is true
+PASS if ((letterA==="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="b") || 1; is true
+PASS if ((letterA!=="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA=="b") && 1; is false
+PASS if ((letterA=="b") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA=="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA=="b") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA!="b") && 1; is true
+PASS if ((letterA!="b") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="b") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="b") && 1; is false
+PASS if ((letterA==="b") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA==="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA==="b") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA!=="b") && 1; is true
+PASS if ((letterA!=="b") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="b") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA=="b") || 1; is true
+PASS if ((letterA=="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="b") || 1; is true
+PASS if ((letterA!="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="b") || 1; is true
+PASS if ((letterA==="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="b") || 1; is true
+PASS if ((letterA!=="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA=="b"); is true
+PASS if (1 || (letterA=="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA=="b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!="b"); is true
+PASS if (1 || (letterA!="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!="b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA==="b"); is true
+PASS if (1 || (letterA==="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA==="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA==="b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!=="b"); is true
+PASS if (1 || (letterA!=="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!=="b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA=="b"); is false
+PASS if (1 && (letterA=="b")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA=="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA=="b"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA!="b"); is true
+PASS if (1 && (letterA!="b")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA!="b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA==="b"); is false
+PASS if (1 && (letterA==="b")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA==="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA==="b"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA!=="b"); is true
+PASS if (1 && (letterA!=="b")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA!=="b"); ) if (k++) return true; return false; is true
+PASS return (letterA=="a"); is true
+PASS if ((letterA=="a")) return true; return false; is true
+PASS var k = 0; while ((letterA=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="a"); ) if (k++) return true; return false; is true
+PASS return (letterA!="a"); is false
+PASS if ((letterA!="a")) return true; return false; is false
+PASS var k = 0; while ((letterA!="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!="a"); ) if (k++) return true; return false; is false
+PASS return (letterA==="a"); is true
+PASS if ((letterA==="a")) return true; return false; is true
+PASS var k = 0; while ((letterA==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="a"); ) if (k++) return true; return false; is true
+PASS return (letterA!=="a"); is false
+PASS if ((letterA!=="a")) return true; return false; is false
+PASS var k = 0; while ((letterA!=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!=="a"); ) if (k++) return true; return false; is false
+PASS return (letterA=="a") || 1; is true
+PASS if ((letterA=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="a") || 1; is true
+PASS if ((letterA!="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="a") || 1; is true
+PASS if ((letterA==="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="a") || 1; is true
+PASS if ((letterA!=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA=="a") && 1; is true
+PASS if ((letterA=="a") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="a") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="a") && 1; is false
+PASS if ((letterA!="a") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA!="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!="a") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA==="a") && 1; is true
+PASS if ((letterA==="a") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="a") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="a") && 1; is false
+PASS if ((letterA!=="a") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA!=="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!=="a") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA=="a") || 1; is true
+PASS if ((letterA=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="a") || 1; is true
+PASS if ((letterA!="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="a") || 1; is true
+PASS if ((letterA==="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="a") || 1; is true
+PASS if ((letterA!=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA=="a"); is true
+PASS if (1 || (letterA=="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA=="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!="a"); is true
+PASS if (1 || (letterA!="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA==="a"); is true
+PASS if (1 || (letterA==="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA==="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!=="a"); is true
+PASS if (1 || (letterA!=="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA=="a"); is true
+PASS if (1 && (letterA=="a")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA!="a"); is false
+PASS if (1 && (letterA!="a")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA!="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA!="a"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA==="a"); is true
+PASS if (1 && (letterA==="a")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA==="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA!=="a"); is false
+PASS if (1 && (letterA!=="a")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA!=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA!=="a"); ) if (k++) return true; return false; is false
+PASS return ("b"=="a"); is false
+PASS if (("b"=="a")) return true; return false; is false
+PASS var k = 0; while (("b"=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"=="a"); ) if (k++) return true; return false; is false
+PASS return ("b"!="a"); is true
+PASS if (("b"!="a")) return true; return false; is true
+PASS var k = 0; while (("b"!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!="a"); ) if (k++) return true; return false; is true
+PASS return ("b"==="a"); is false
+PASS if (("b"==="a")) return true; return false; is false
+PASS var k = 0; while (("b"==="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"==="a"); ) if (k++) return true; return false; is false
+PASS return ("b"!=="a"); is true
+PASS if (("b"!=="a")) return true; return false; is true
+PASS var k = 0; while (("b"!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=="a"); ) if (k++) return true; return false; is true
+PASS return ("b"=="a") || 1; is true
+PASS if (("b"=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!="a") || 1; is true
+PASS if (("b"!="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"==="a") || 1; is true
+PASS if (("b"==="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"==="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!=="a") || 1; is true
+PASS if (("b"!=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"=="a") && 1; is false
+PASS if (("b"=="a") && 1) return true; return false; is false
+PASS var k = 0; while (("b"=="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"=="a") && 1; ) if (k++) return true; return false; is false
+PASS return ("b"!="a") && 1; is true
+PASS if (("b"!="a") && 1) return true; return false; is true
+PASS var k = 0; while (("b"!="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("b"==="a") && 1; is false
+PASS if (("b"==="a") && 1) return true; return false; is false
+PASS var k = 0; while (("b"==="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"==="a") && 1; ) if (k++) return true; return false; is false
+PASS return ("b"!=="a") && 1; is true
+PASS if (("b"!=="a") && 1) return true; return false; is true
+PASS var k = 0; while (("b"!=="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("b"=="a") || 1; is true
+PASS if (("b"=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"=="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!="a") || 1; is true
+PASS if (("b"!="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"==="a") || 1; is true
+PASS if (("b"==="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"==="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!=="a") || 1; is true
+PASS if (("b"!=="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b"=="a"); is true
+PASS if (1 || ("b"=="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"=="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"!="a"); is true
+PASS if (1 || ("b"!="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"!="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"==="a"); is true
+PASS if (1 || ("b"==="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"==="a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"!=="a"); is true
+PASS if (1 || ("b"!=="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"!=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"=="a"); is false
+PASS if (1 && ("b"=="a")) return true; return false; is false
+PASS var k = 0; while (1 && ("b"=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"=="a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"!="a"); is true
+PASS if (1 && ("b"!="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("b"!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b"!="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"==="a"); is false
+PASS if (1 && ("b"==="a")) return true; return false; is false
+PASS var k = 0; while (1 && ("b"==="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"==="a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"!=="a"); is true
+PASS if (1 && ("b"!=="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("b"!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b"!=="a"); ) if (k++) return true; return false; is true
+PASS return (letterA=="b"); is false
+PASS if ((letterA=="b")) return true; return false; is false
+PASS var k = 0; while ((letterA=="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA=="b"); ) if (k++) return true; return false; is false
+PASS return (letterA!="b"); is true
+PASS if ((letterA!="b")) return true; return false; is true
+PASS var k = 0; while ((letterA!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="b"); ) if (k++) return true; return false; is true
+PASS return (letterA==="b"); is false
+PASS if ((letterA==="b")) return true; return false; is false
+PASS var k = 0; while ((letterA==="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA==="b"); ) if (k++) return true; return false; is false
+PASS return (letterA!=="b"); is true
+PASS if ((letterA!=="b")) return true; return false; is true
+PASS var k = 0; while ((letterA!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="b"); ) if (k++) return true; return false; is true
+PASS return (letterA=="b") || 1; is true
+PASS if ((letterA=="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="b") || 1; is true
+PASS if ((letterA!="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="b") || 1; is true
+PASS if ((letterA==="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="b") || 1; is true
+PASS if ((letterA!=="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA=="b") && 1; is false
+PASS if ((letterA=="b") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA=="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA=="b") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA!="b") && 1; is true
+PASS if ((letterA!="b") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="b") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="b") && 1; is false
+PASS if ((letterA==="b") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA==="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA==="b") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA!=="b") && 1; is true
+PASS if ((letterA!=="b") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="b") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA=="b") || 1; is true
+PASS if ((letterA=="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="b") || 1; is true
+PASS if ((letterA!="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="b") || 1; is true
+PASS if ((letterA==="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="b") || 1; is true
+PASS if ((letterA!=="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA=="b"); is true
+PASS if (1 || (letterA=="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA=="b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!="b"); is true
+PASS if (1 || (letterA!="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!="b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA==="b"); is true
+PASS if (1 || (letterA==="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA==="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA==="b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!=="b"); is true
+PASS if (1 || (letterA!=="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!=="b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA=="b"); is false
+PASS if (1 && (letterA=="b")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA=="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA=="b"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA!="b"); is true
+PASS if (1 && (letterA!="b")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA!="b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA==="b"); is false
+PASS if (1 && (letterA==="b")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA==="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA==="b"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA!=="b"); is true
+PASS if (1 && (letterA!=="b")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA!=="b"); ) if (k++) return true; return false; is true
+PASS return (letterA==letterA); is true
+PASS if ((letterA==letterA)) return true; return false; is true
+PASS var k = 0; while ((letterA==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==letterA); ) if (k++) return true; return false; is true
+PASS return (letterA!=letterA); is false
+PASS if ((letterA!=letterA)) return true; return false; is false
+PASS var k = 0; while ((letterA!=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!=letterA); ) if (k++) return true; return false; is false
+PASS return (letterA===letterA); is true
+PASS if ((letterA===letterA)) return true; return false; is true
+PASS var k = 0; while ((letterA===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===letterA); ) if (k++) return true; return false; is true
+PASS return (letterA!==letterA); is false
+PASS if ((letterA!==letterA)) return true; return false; is false
+PASS var k = 0; while ((letterA!==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!==letterA); ) if (k++) return true; return false; is false
+PASS return (letterA==letterA) || 1; is true
+PASS if ((letterA==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=letterA) || 1; is true
+PASS if ((letterA!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA===letterA) || 1; is true
+PASS if ((letterA===letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!==letterA) || 1; is true
+PASS if ((letterA!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==letterA) && 1; is true
+PASS if ((letterA==letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA==letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=letterA) && 1; is false
+PASS if ((letterA!=letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA!=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA===letterA) && 1; is true
+PASS if ((letterA===letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA===letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA!==letterA) && 1; is false
+PASS if ((letterA!==letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA!==letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!==letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA==letterA) || 1; is true
+PASS if ((letterA==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=letterA) || 1; is true
+PASS if ((letterA!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA===letterA) || 1; is true
+PASS if ((letterA===letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!==letterA) || 1; is true
+PASS if ((letterA!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA==letterA); is true
+PASS if (1 || (letterA==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA==letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!=letterA); is true
+PASS if (1 || (letterA!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA===letterA); is true
+PASS if (1 || (letterA===letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA===letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!==letterA); is true
+PASS if (1 || (letterA!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA==letterA); is true
+PASS if (1 && (letterA==letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA!=letterA); is false
+PASS if (1 && (letterA!=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA!=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA!=letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA===letterA); is true
+PASS if (1 && (letterA===letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA===letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA!==letterA); is false
+PASS if (1 && (letterA!==letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA!==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA!==letterA); ) if (k++) return true; return false; is false
+PASS return ("b"==letterA); is false
+PASS if (("b"==letterA)) return true; return false; is false
+PASS var k = 0; while (("b"==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"==letterA); ) if (k++) return true; return false; is false
+PASS return ("b"!=letterA); is true
+PASS if (("b"!=letterA)) return true; return false; is true
+PASS var k = 0; while (("b"!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=letterA); ) if (k++) return true; return false; is true
+PASS return ("b"===letterA); is false
+PASS if (("b"===letterA)) return true; return false; is false
+PASS var k = 0; while (("b"===letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"===letterA); ) if (k++) return true; return false; is false
+PASS return ("b"!==letterA); is true
+PASS if (("b"!==letterA)) return true; return false; is true
+PASS var k = 0; while (("b"!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!==letterA); ) if (k++) return true; return false; is true
+PASS return ("b"==letterA) || 1; is true
+PASS if (("b"==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!=letterA) || 1; is true
+PASS if (("b"!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"===letterA) || 1; is true
+PASS if (("b"===letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!==letterA) || 1; is true
+PASS if (("b"!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"==letterA) && 1; is false
+PASS if (("b"==letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("b"==letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"==letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("b"!=letterA) && 1; is true
+PASS if (("b"!=letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("b"!=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("b"===letterA) && 1; is false
+PASS if (("b"===letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("b"===letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"===letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("b"!==letterA) && 1; is true
+PASS if (("b"!==letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("b"!==letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!==letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("b"==letterA) || 1; is true
+PASS if (("b"==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!=letterA) || 1; is true
+PASS if (("b"!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"===letterA) || 1; is true
+PASS if (("b"===letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!==letterA) || 1; is true
+PASS if (("b"!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b"==letterA); is true
+PASS if (1 || ("b"==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"==letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"!=letterA); is true
+PASS if (1 || ("b"!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"===letterA); is true
+PASS if (1 || ("b"===letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"===letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"!==letterA); is true
+PASS if (1 || ("b"!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"!==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"==letterA); is false
+PASS if (1 && ("b"==letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("b"==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"==letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"!=letterA); is true
+PASS if (1 && ("b"!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("b"!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b"!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"===letterA); is false
+PASS if (1 && ("b"===letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("b"===letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"===letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"!==letterA); is true
+PASS if (1 && ("b"!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("b"!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b"!==letterA); ) if (k++) return true; return false; is true
+PASS return ("a"=="b"); is false
+PASS if (("a"=="b")) return true; return false; is false
+PASS var k = 0; while (("a"=="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"=="b"); ) if (k++) return true; return false; is false
+PASS return ("a"!="b"); is true
+PASS if (("a"!="b")) return true; return false; is true
+PASS var k = 0; while (("a"!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="b"); ) if (k++) return true; return false; is true
+PASS return ("a"==="b"); is false
+PASS if (("a"==="b")) return true; return false; is false
+PASS var k = 0; while (("a"==="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"==="b"); ) if (k++) return true; return false; is false
+PASS return ("a"!=="b"); is true
+PASS if (("a"!=="b")) return true; return false; is true
+PASS var k = 0; while (("a"!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="b"); ) if (k++) return true; return false; is true
+PASS return ("a"=="b") || 1; is true
+PASS if (("a"=="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"=="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!="b") || 1; is true
+PASS if (("a"!="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==="b") || 1; is true
+PASS if (("a"==="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"==="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=="b") || 1; is true
+PASS if (("a"!=="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"=="b") && 1; is false
+PASS if (("a"=="b") && 1) return true; return false; is false
+PASS var k = 0; while (("a"=="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"=="b") && 1; ) if (k++) return true; return false; is false
+PASS return ("a"!="b") && 1; is true
+PASS if (("a"!="b") && 1) return true; return false; is true
+PASS var k = 0; while (("a"!="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="b") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"==="b") && 1; is false
+PASS if (("a"==="b") && 1) return true; return false; is false
+PASS var k = 0; while (("a"==="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"==="b") && 1; ) if (k++) return true; return false; is false
+PASS return ("a"!=="b") && 1; is true
+PASS if (("a"!=="b") && 1) return true; return false; is true
+PASS var k = 0; while (("a"!=="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="b") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"=="b") || 1; is true
+PASS if (("a"=="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"=="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!="b") || 1; is true
+PASS if (("a"!="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==="b") || 1; is true
+PASS if (("a"==="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"==="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=="b") || 1; is true
+PASS if (("a"!=="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"=="b"); is true
+PASS if (1 || ("a"=="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"=="b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!="b"); is true
+PASS if (1 || ("a"!="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!="b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"==="b"); is true
+PASS if (1 || ("a"==="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"==="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"==="b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!=="b"); is true
+PASS if (1 || ("a"!=="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!=="b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"=="b"); is false
+PASS if (1 && ("a"=="b")) return true; return false; is false
+PASS var k = 0; while (1 && ("a"=="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"=="b"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"!="b"); is true
+PASS if (1 && ("a"!="b")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"!="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"!="b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"==="b"); is false
+PASS if (1 && ("a"==="b")) return true; return false; is false
+PASS var k = 0; while (1 && ("a"==="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"==="b"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"!=="b"); is true
+PASS if (1 && ("a"!=="b")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"!=="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"!=="b"); ) if (k++) return true; return false; is true
+PASS return ("a"==letterA); is true
+PASS if (("a"==letterA)) return true; return false; is true
+PASS var k = 0; while (("a"==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==letterA); ) if (k++) return true; return false; is true
+PASS return ("a"!=letterA); is false
+PASS if (("a"!=letterA)) return true; return false; is false
+PASS var k = 0; while (("a"!=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!=letterA); ) if (k++) return true; return false; is false
+PASS return ("a"===letterA); is true
+PASS if (("a"===letterA)) return true; return false; is true
+PASS var k = 0; while (("a"===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===letterA); ) if (k++) return true; return false; is true
+PASS return ("a"!==letterA); is false
+PASS if (("a"!==letterA)) return true; return false; is false
+PASS var k = 0; while (("a"!==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!==letterA); ) if (k++) return true; return false; is false
+PASS return ("a"==letterA) || 1; is true
+PASS if (("a"==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=letterA) || 1; is true
+PASS if (("a"!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"===letterA) || 1; is true
+PASS if (("a"===letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!==letterA) || 1; is true
+PASS if (("a"!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==letterA) && 1; is true
+PASS if (("a"==letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("a"==letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=letterA) && 1; is false
+PASS if (("a"!=letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("a"!=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"===letterA) && 1; is true
+PASS if (("a"===letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("a"===letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("a"!==letterA) && 1; is false
+PASS if (("a"!==letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("a"!==letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!==letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"==letterA) || 1; is true
+PASS if (("a"==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=letterA) || 1; is true
+PASS if (("a"!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"===letterA) || 1; is true
+PASS if (("a"===letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!==letterA) || 1; is true
+PASS if (("a"!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"==letterA); is true
+PASS if (1 || ("a"==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"==letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!=letterA); is true
+PASS if (1 || ("a"!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"===letterA); is true
+PASS if (1 || ("a"===letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"===letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!==letterA); is true
+PASS if (1 || ("a"!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"==letterA); is true
+PASS if (1 && ("a"==letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("a"==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"!=letterA); is false
+PASS if (1 && ("a"!=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"!=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"!=letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"===letterA); is true
+PASS if (1 && ("a"===letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("a"===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"===letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"!==letterA); is false
+PASS if (1 && ("a"!==letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"!==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"!==letterA); ) if (k++) return true; return false; is false
+PASS return ("b"==letterA); is false
+PASS if (("b"==letterA)) return true; return false; is false
+PASS var k = 0; while (("b"==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"==letterA); ) if (k++) return true; return false; is false
+PASS return ("b"!=letterA); is true
+PASS if (("b"!=letterA)) return true; return false; is true
+PASS var k = 0; while (("b"!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=letterA); ) if (k++) return true; return false; is true
+PASS return ("b"===letterA); is false
+PASS if (("b"===letterA)) return true; return false; is false
+PASS var k = 0; while (("b"===letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"===letterA); ) if (k++) return true; return false; is false
+PASS return ("b"!==letterA); is true
+PASS if (("b"!==letterA)) return true; return false; is true
+PASS var k = 0; while (("b"!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!==letterA); ) if (k++) return true; return false; is true
+PASS return ("b"==letterA) || 1; is true
+PASS if (("b"==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!=letterA) || 1; is true
+PASS if (("b"!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"===letterA) || 1; is true
+PASS if (("b"===letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!==letterA) || 1; is true
+PASS if (("b"!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"==letterA) && 1; is false
+PASS if (("b"==letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("b"==letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"==letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("b"!=letterA) && 1; is true
+PASS if (("b"!=letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("b"!=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("b"===letterA) && 1; is false
+PASS if (("b"===letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("b"===letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"===letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("b"!==letterA) && 1; is true
+PASS if (("b"!==letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("b"!==letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!==letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("b"==letterA) || 1; is true
+PASS if (("b"==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!=letterA) || 1; is true
+PASS if (("b"!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"===letterA) || 1; is true
+PASS if (("b"===letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"!==letterA) || 1; is true
+PASS if (("b"!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b"==letterA); is true
+PASS if (1 || ("b"==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"==letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"!=letterA); is true
+PASS if (1 || ("b"!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"===letterA); is true
+PASS if (1 || ("b"===letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"===letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"!==letterA); is true
+PASS if (1 || ("b"!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"!==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"==letterA); is false
+PASS if (1 && ("b"==letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("b"==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"==letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"!=letterA); is true
+PASS if (1 && ("b"!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("b"!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b"!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"===letterA); is false
+PASS if (1 && ("b"===letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("b"===letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"===letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"!==letterA); is true
+PASS if (1 && ("b"!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("b"!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b"!==letterA); ) if (k++) return true; return false; is true
+PASS return ("a"==0); is false
+PASS if (("a"==0)) return true; return false; is false
+PASS var k = 0; while (("a"==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"==0); ) if (k++) return true; return false; is false
+PASS return ("a"!=0); is true
+PASS if (("a"!=0)) return true; return false; is true
+PASS var k = 0; while (("a"!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=0); ) if (k++) return true; return false; is true
+PASS return ("a"===0); is false
+PASS if (("a"===0)) return true; return false; is false
+PASS var k = 0; while (("a"===0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"===0); ) if (k++) return true; return false; is false
+PASS return ("a"!==0); is true
+PASS if (("a"!==0)) return true; return false; is true
+PASS var k = 0; while (("a"!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!==0); ) if (k++) return true; return false; is true
+PASS return ("a"==0) || 1; is true
+PASS if (("a"==0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=0) || 1; is true
+PASS if (("a"!=0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"===0) || 1; is true
+PASS if (("a"===0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!==0) || 1; is true
+PASS if (("a"!==0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!==0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==0) && 1; is false
+PASS if (("a"==0) && 1) return true; return false; is false
+PASS var k = 0; while (("a"==0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"==0) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"!=0) && 1; is true
+PASS if (("a"!=0) && 1) return true; return false; is true
+PASS var k = 0; while (("a"!=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=0) && 1; ) if (k++) return true; return false; is true
+PASS return ("a"===0) && 1; is false
+PASS if (("a"===0) && 1) return true; return false; is false
+PASS var k = 0; while (("a"===0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"===0) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"!==0) && 1; is true
+PASS if (("a"!==0) && 1) return true; return false; is true
+PASS var k = 0; while (("a"!==0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!==0) && 1; ) if (k++) return true; return false; is true
+PASS return ("a"==0) || 1; is true
+PASS if (("a"==0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=0) || 1; is true
+PASS if (("a"!=0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"===0) || 1; is true
+PASS if (("a"===0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!==0) || 1; is true
+PASS if (("a"!==0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!==0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"==0); is true
+PASS if (1 || ("a"==0)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"==0); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!=0); is true
+PASS if (1 || ("a"!=0)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!=0); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"===0); is true
+PASS if (1 || ("a"===0)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"===0); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!==0); is true
+PASS if (1 || ("a"!==0)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!==0); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"==0); is false
+PASS if (1 && ("a"==0)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"==0); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"!=0); is true
+PASS if (1 && ("a"!=0)) return true; return false; is true
+PASS var k = 0; while (1 && ("a"!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"!=0); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"===0); is false
+PASS if (1 && ("a"===0)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"===0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"===0); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"!==0); is true
+PASS if (1 && ("a"!==0)) return true; return false; is true
+PASS var k = 0; while (1 && ("a"!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"!==0); ) if (k++) return true; return false; is true
+PASS return (0=="a"); is false
+PASS if ((0=="a")) return true; return false; is false
+PASS var k = 0; while ((0=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0=="a"); ) if (k++) return true; return false; is false
+PASS return (0!="a"); is true
+PASS if ((0!="a")) return true; return false; is true
+PASS var k = 0; while ((0!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!="a"); ) if (k++) return true; return false; is true
+PASS return (0==="a"); is false
+PASS if ((0==="a")) return true; return false; is false
+PASS var k = 0; while ((0==="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==="a"); ) if (k++) return true; return false; is false
+PASS return (0!=="a"); is true
+PASS if ((0!=="a")) return true; return false; is true
+PASS var k = 0; while ((0!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=="a"); ) if (k++) return true; return false; is true
+PASS return (0=="a") || 1; is true
+PASS if ((0=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0!="a") || 1; is true
+PASS if ((0!="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0==="a") || 1; is true
+PASS if ((0==="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0!=="a") || 1; is true
+PASS if ((0!=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0=="a") && 1; is false
+PASS if ((0=="a") && 1) return true; return false; is false
+PASS var k = 0; while ((0=="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0=="a") && 1; ) if (k++) return true; return false; is false
+PASS return (0!="a") && 1; is true
+PASS if ((0!="a") && 1) return true; return false; is true
+PASS var k = 0; while ((0!="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!="a") && 1; ) if (k++) return true; return false; is true
+PASS return (0==="a") && 1; is false
+PASS if ((0==="a") && 1) return true; return false; is false
+PASS var k = 0; while ((0==="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==="a") && 1; ) if (k++) return true; return false; is false
+PASS return (0!=="a") && 1; is true
+PASS if ((0!=="a") && 1) return true; return false; is true
+PASS var k = 0; while ((0!=="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=="a") && 1; ) if (k++) return true; return false; is true
+PASS return (0=="a") || 1; is true
+PASS if ((0=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0!="a") || 1; is true
+PASS if ((0!="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0==="a") || 1; is true
+PASS if ((0==="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0!=="a") || 1; is true
+PASS if ((0!=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0=="a"); is true
+PASS if (1 || (0=="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0=="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0!="a"); is true
+PASS if (1 || (0!="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0==="a"); is true
+PASS if (1 || (0==="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0==="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0!=="a"); is true
+PASS if (1 || (0!=="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (0=="a"); is false
+PASS if (1 && (0=="a")) return true; return false; is false
+PASS var k = 0; while (1 && (0=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0=="a"); ) if (k++) return true; return false; is false
+PASS return 1 && (0!="a"); is true
+PASS if (1 && (0!="a")) return true; return false; is true
+PASS var k = 0; while (1 && (0!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (0==="a"); is false
+PASS if (1 && (0==="a")) return true; return false; is false
+PASS var k = 0; while (1 && (0==="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0==="a"); ) if (k++) return true; return false; is false
+PASS return 1 && (0!=="a"); is true
+PASS if (1 && (0!=="a")) return true; return false; is true
+PASS var k = 0; while (1 && (0!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!=="a"); ) if (k++) return true; return false; is true
+PASS return (letterA==0); is false
+PASS if ((letterA==0)) return true; return false; is false
+PASS var k = 0; while ((letterA==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA==0); ) if (k++) return true; return false; is false
+PASS return (letterA!=0); is true
+PASS if ((letterA!=0)) return true; return false; is true
+PASS var k = 0; while ((letterA!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=0); ) if (k++) return true; return false; is true
+PASS return (letterA===0); is false
+PASS if ((letterA===0)) return true; return false; is false
+PASS var k = 0; while ((letterA===0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA===0); ) if (k++) return true; return false; is false
+PASS return (letterA!==0); is true
+PASS if ((letterA!==0)) return true; return false; is true
+PASS var k = 0; while ((letterA!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!==0); ) if (k++) return true; return false; is true
+PASS return (letterA==0) || 1; is true
+PASS if ((letterA==0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=0) || 1; is true
+PASS if ((letterA!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA===0) || 1; is true
+PASS if ((letterA===0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!==0) || 1; is true
+PASS if ((letterA!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!==0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==0) && 1; is false
+PASS if ((letterA==0) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA==0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA==0) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA!=0) && 1; is true
+PASS if ((letterA!=0) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=0) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA===0) && 1; is false
+PASS if ((letterA===0) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA===0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA===0) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA!==0) && 1; is true
+PASS if ((letterA!==0) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA!==0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!==0) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA==0) || 1; is true
+PASS if ((letterA==0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=0) || 1; is true
+PASS if ((letterA!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA===0) || 1; is true
+PASS if ((letterA===0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!==0) || 1; is true
+PASS if ((letterA!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!==0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA==0); is true
+PASS if (1 || (letterA==0)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA==0); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!=0); is true
+PASS if (1 || (letterA!=0)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!=0); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA===0); is true
+PASS if (1 || (letterA===0)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA===0); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!==0); is true
+PASS if (1 || (letterA!==0)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!==0); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA==0); is false
+PASS if (1 && (letterA==0)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA==0); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA!=0); is true
+PASS if (1 && (letterA!=0)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA!=0); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA===0); is false
+PASS if (1 && (letterA===0)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA===0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA===0); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA!==0); is true
+PASS if (1 && (letterA!==0)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA!==0); ) if (k++) return true; return false; is true
+PASS return (letterA=="a"); is true
+PASS if ((letterA=="a")) return true; return false; is true
+PASS var k = 0; while ((letterA=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="a"); ) if (k++) return true; return false; is true
+PASS return (letterA!="a"); is false
+PASS if ((letterA!="a")) return true; return false; is false
+PASS var k = 0; while ((letterA!="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!="a"); ) if (k++) return true; return false; is false
+PASS return (letterA==="a"); is true
+PASS if ((letterA==="a")) return true; return false; is true
+PASS var k = 0; while ((letterA==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="a"); ) if (k++) return true; return false; is true
+PASS return (letterA!=="a"); is false
+PASS if ((letterA!=="a")) return true; return false; is false
+PASS var k = 0; while ((letterA!=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!=="a"); ) if (k++) return true; return false; is false
+PASS return (letterA=="a") || 1; is true
+PASS if ((letterA=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="a") || 1; is true
+PASS if ((letterA!="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="a") || 1; is true
+PASS if ((letterA==="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="a") || 1; is true
+PASS if ((letterA!=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA=="a") && 1; is true
+PASS if ((letterA=="a") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="a") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="a") && 1; is false
+PASS if ((letterA!="a") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA!="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!="a") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA==="a") && 1; is true
+PASS if ((letterA==="a") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="a") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="a") && 1; is false
+PASS if ((letterA!=="a") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA!=="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!=="a") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA=="a") || 1; is true
+PASS if ((letterA=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!="a") || 1; is true
+PASS if ((letterA!="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==="a") || 1; is true
+PASS if ((letterA==="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=="a") || 1; is true
+PASS if ((letterA!=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA=="a"); is true
+PASS if (1 || (letterA=="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA=="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!="a"); is true
+PASS if (1 || (letterA!="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA==="a"); is true
+PASS if (1 || (letterA==="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA==="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!=="a"); is true
+PASS if (1 || (letterA!=="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA=="a"); is true
+PASS if (1 && (letterA=="a")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA!="a"); is false
+PASS if (1 && (letterA!="a")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA!="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA!="a"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA==="a"); is true
+PASS if (1 && (letterA==="a")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA==="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA!=="a"); is false
+PASS if (1 && (letterA!=="a")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA!=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA!=="a"); ) if (k++) return true; return false; is false
+PASS return (0=="a"); is false
+PASS if ((0=="a")) return true; return false; is false
+PASS var k = 0; while ((0=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0=="a"); ) if (k++) return true; return false; is false
+PASS return (0!="a"); is true
+PASS if ((0!="a")) return true; return false; is true
+PASS var k = 0; while ((0!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!="a"); ) if (k++) return true; return false; is true
+PASS return (0==="a"); is false
+PASS if ((0==="a")) return true; return false; is false
+PASS var k = 0; while ((0==="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==="a"); ) if (k++) return true; return false; is false
+PASS return (0!=="a"); is true
+PASS if ((0!=="a")) return true; return false; is true
+PASS var k = 0; while ((0!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=="a"); ) if (k++) return true; return false; is true
+PASS return (0=="a") || 1; is true
+PASS if ((0=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0!="a") || 1; is true
+PASS if ((0!="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0==="a") || 1; is true
+PASS if ((0==="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0!=="a") || 1; is true
+PASS if ((0!=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0=="a") && 1; is false
+PASS if ((0=="a") && 1) return true; return false; is false
+PASS var k = 0; while ((0=="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0=="a") && 1; ) if (k++) return true; return false; is false
+PASS return (0!="a") && 1; is true
+PASS if ((0!="a") && 1) return true; return false; is true
+PASS var k = 0; while ((0!="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!="a") && 1; ) if (k++) return true; return false; is true
+PASS return (0==="a") && 1; is false
+PASS if ((0==="a") && 1) return true; return false; is false
+PASS var k = 0; while ((0==="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==="a") && 1; ) if (k++) return true; return false; is false
+PASS return (0!=="a") && 1; is true
+PASS if ((0!=="a") && 1) return true; return false; is true
+PASS var k = 0; while ((0!=="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=="a") && 1; ) if (k++) return true; return false; is true
+PASS return (0=="a") || 1; is true
+PASS if ((0=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0=="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0!="a") || 1; is true
+PASS if ((0!="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0!="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0==="a") || 1; is true
+PASS if ((0==="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0==="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0!=="a") || 1; is true
+PASS if ((0!=="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0!=="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0=="a"); is true
+PASS if (1 || (0=="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0=="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0!="a"); is true
+PASS if (1 || (0!="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0==="a"); is true
+PASS if (1 || (0==="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0==="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0==="a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0!=="a"); is true
+PASS if (1 || (0!=="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!=="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (0=="a"); is false
+PASS if (1 && (0=="a")) return true; return false; is false
+PASS var k = 0; while (1 && (0=="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0=="a"); ) if (k++) return true; return false; is false
+PASS return 1 && (0!="a"); is true
+PASS if (1 && (0!="a")) return true; return false; is true
+PASS var k = 0; while (1 && (0!="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (0==="a"); is false
+PASS if (1 && (0==="a")) return true; return false; is false
+PASS var k = 0; while (1 && (0==="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0==="a"); ) if (k++) return true; return false; is false
+PASS return 1 && (0!=="a"); is true
+PASS if (1 && (0!=="a")) return true; return false; is true
+PASS var k = 0; while (1 && (0!=="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!=="a"); ) if (k++) return true; return false; is true
+PASS return (letterA==letterA); is true
+PASS if ((letterA==letterA)) return true; return false; is true
+PASS var k = 0; while ((letterA==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==letterA); ) if (k++) return true; return false; is true
+PASS return (letterA!=letterA); is false
+PASS if ((letterA!=letterA)) return true; return false; is false
+PASS var k = 0; while ((letterA!=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!=letterA); ) if (k++) return true; return false; is false
+PASS return (letterA===letterA); is true
+PASS if ((letterA===letterA)) return true; return false; is true
+PASS var k = 0; while ((letterA===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===letterA); ) if (k++) return true; return false; is true
+PASS return (letterA!==letterA); is false
+PASS if ((letterA!==letterA)) return true; return false; is false
+PASS var k = 0; while ((letterA!==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!==letterA); ) if (k++) return true; return false; is false
+PASS return (letterA==letterA) || 1; is true
+PASS if ((letterA==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=letterA) || 1; is true
+PASS if ((letterA!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA===letterA) || 1; is true
+PASS if ((letterA===letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!==letterA) || 1; is true
+PASS if ((letterA!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA==letterA) && 1; is true
+PASS if ((letterA==letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA==letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=letterA) && 1; is false
+PASS if ((letterA!=letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA!=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA===letterA) && 1; is true
+PASS if ((letterA===letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA===letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA!==letterA) && 1; is false
+PASS if ((letterA!==letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA!==letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA!==letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA==letterA) || 1; is true
+PASS if ((letterA==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!=letterA) || 1; is true
+PASS if ((letterA!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA===letterA) || 1; is true
+PASS if ((letterA===letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA!==letterA) || 1; is true
+PASS if ((letterA!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA==letterA); is true
+PASS if (1 || (letterA==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA==letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!=letterA); is true
+PASS if (1 || (letterA!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA===letterA); is true
+PASS if (1 || (letterA===letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA===letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA!==letterA); is true
+PASS if (1 || (letterA!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA!==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA==letterA); is true
+PASS if (1 && (letterA==letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA!=letterA); is false
+PASS if (1 && (letterA!=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA!=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA!=letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA===letterA); is true
+PASS if (1 && (letterA===letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA===letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA!==letterA); is false
+PASS if (1 && (letterA!==letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA!==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA!==letterA); ) if (k++) return true; return false; is false
+PASS return (0==letterA); is false
+PASS if ((0==letterA)) return true; return false; is false
+PASS var k = 0; while ((0==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==letterA); ) if (k++) return true; return false; is false
+PASS return (0!=letterA); is true
+PASS if ((0!=letterA)) return true; return false; is true
+PASS var k = 0; while ((0!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=letterA); ) if (k++) return true; return false; is true
+PASS return (0===letterA); is false
+PASS if ((0===letterA)) return true; return false; is false
+PASS var k = 0; while ((0===letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0===letterA); ) if (k++) return true; return false; is false
+PASS return (0!==letterA); is true
+PASS if ((0!==letterA)) return true; return false; is true
+PASS var k = 0; while ((0!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==letterA); ) if (k++) return true; return false; is true
+PASS return (0==letterA) || 1; is true
+PASS if ((0==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=letterA) || 1; is true
+PASS if ((0!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0===letterA) || 1; is true
+PASS if ((0===letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==letterA) || 1; is true
+PASS if ((0!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0==letterA) && 1; is false
+PASS if ((0==letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0==letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0!=letterA) && 1; is true
+PASS if ((0!=letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((0!=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (0===letterA) && 1; is false
+PASS if ((0===letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0===letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0===letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0!==letterA) && 1; is true
+PASS if ((0!==letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((0!==letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (0==letterA) || 1; is true
+PASS if ((0==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=letterA) || 1; is true
+PASS if ((0!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0===letterA) || 1; is true
+PASS if ((0===letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==letterA) || 1; is true
+PASS if ((0!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0==letterA); is true
+PASS if (1 || (0==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0==letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0!=letterA); is true
+PASS if (1 || (0!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0===letterA); is true
+PASS if (1 || (0===letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0===letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0!==letterA); is true
+PASS if (1 || (0!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (0==letterA); is false
+PASS if (1 && (0==letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0==letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (0!=letterA); is true
+PASS if (1 && (0!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (0!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (0===letterA); is false
+PASS if (1 && (0===letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0===letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0===letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (0!==letterA); is true
+PASS if (1 && (0!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (0!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!==letterA); ) if (k++) return true; return false; is true
+PASS return ("a"==letterA); is true
+PASS if (("a"==letterA)) return true; return false; is true
+PASS var k = 0; while (("a"==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==letterA); ) if (k++) return true; return false; is true
+PASS return ("a"!=letterA); is false
+PASS if (("a"!=letterA)) return true; return false; is false
+PASS var k = 0; while (("a"!=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!=letterA); ) if (k++) return true; return false; is false
+PASS return ("a"===letterA); is true
+PASS if (("a"===letterA)) return true; return false; is true
+PASS var k = 0; while (("a"===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===letterA); ) if (k++) return true; return false; is true
+PASS return ("a"!==letterA); is false
+PASS if (("a"!==letterA)) return true; return false; is false
+PASS var k = 0; while (("a"!==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!==letterA); ) if (k++) return true; return false; is false
+PASS return ("a"==letterA) || 1; is true
+PASS if (("a"==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=letterA) || 1; is true
+PASS if (("a"!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"===letterA) || 1; is true
+PASS if (("a"===letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!==letterA) || 1; is true
+PASS if (("a"!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"==letterA) && 1; is true
+PASS if (("a"==letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("a"==letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=letterA) && 1; is false
+PASS if (("a"!=letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("a"!=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"===letterA) && 1; is true
+PASS if (("a"===letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("a"===letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("a"!==letterA) && 1; is false
+PASS if (("a"!==letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("a"!==letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"!==letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"==letterA) || 1; is true
+PASS if (("a"==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!=letterA) || 1; is true
+PASS if (("a"!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"===letterA) || 1; is true
+PASS if (("a"===letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"!==letterA) || 1; is true
+PASS if (("a"!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"==letterA); is true
+PASS if (1 || ("a"==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"==letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!=letterA); is true
+PASS if (1 || ("a"!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"===letterA); is true
+PASS if (1 || ("a"===letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"===letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"!==letterA); is true
+PASS if (1 || ("a"!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"!==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"==letterA); is true
+PASS if (1 && ("a"==letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("a"==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"!=letterA); is false
+PASS if (1 && ("a"!=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"!=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"!=letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"===letterA); is true
+PASS if (1 && ("a"===letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("a"===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"===letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"!==letterA); is false
+PASS if (1 && ("a"!==letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"!==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"!==letterA); ) if (k++) return true; return false; is false
+PASS return (0==letterA); is false
+PASS if ((0==letterA)) return true; return false; is false
+PASS var k = 0; while ((0==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==letterA); ) if (k++) return true; return false; is false
+PASS return (0!=letterA); is true
+PASS if ((0!=letterA)) return true; return false; is true
+PASS var k = 0; while ((0!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=letterA); ) if (k++) return true; return false; is true
+PASS return (0===letterA); is false
+PASS if ((0===letterA)) return true; return false; is false
+PASS var k = 0; while ((0===letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0===letterA); ) if (k++) return true; return false; is false
+PASS return (0!==letterA); is true
+PASS if ((0!==letterA)) return true; return false; is true
+PASS var k = 0; while ((0!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==letterA); ) if (k++) return true; return false; is true
+PASS return (0==letterA) || 1; is true
+PASS if ((0==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=letterA) || 1; is true
+PASS if ((0!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0===letterA) || 1; is true
+PASS if ((0===letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==letterA) || 1; is true
+PASS if ((0!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0==letterA) && 1; is false
+PASS if ((0==letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0==letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0!=letterA) && 1; is true
+PASS if ((0!=letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((0!=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (0===letterA) && 1; is false
+PASS if ((0===letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0===letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0===letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0!==letterA) && 1; is true
+PASS if ((0!==letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((0!==letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (0==letterA) || 1; is true
+PASS if ((0==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=letterA) || 1; is true
+PASS if ((0!=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0===letterA) || 1; is true
+PASS if ((0===letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0===letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==letterA) || 1; is true
+PASS if ((0!==letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0==letterA); is true
+PASS if (1 || (0==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0==letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0!=letterA); is true
+PASS if (1 || (0!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0===letterA); is true
+PASS if (1 || (0===letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0===letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0===letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0!==letterA); is true
+PASS if (1 || (0!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!==letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (0==letterA); is false
+PASS if (1 && (0==letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0==letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0==letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (0!=letterA); is true
+PASS if (1 && (0!=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (0!=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (0===letterA); is false
+PASS if (1 && (0===letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0===letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0===letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (0!==letterA); is true
+PASS if (1 && (0!==letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (0!==letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!==letterA); ) if (k++) return true; return false; is true
+PASS return (0==1); is false
+PASS if ((0==1)) return true; return false; is false
+PASS var k = 0; while ((0==1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==1); ) if (k++) return true; return false; is false
+PASS return (0!=1); is true
+PASS if ((0!=1)) return true; return false; is true
+PASS var k = 0; while ((0!=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=1); ) if (k++) return true; return false; is true
+PASS return (0===1); is false
+PASS if ((0===1)) return true; return false; is false
+PASS var k = 0; while ((0===1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0===1); ) if (k++) return true; return false; is false
+PASS return (0!==1); is true
+PASS if ((0!==1)) return true; return false; is true
+PASS var k = 0; while ((0!==1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==1); ) if (k++) return true; return false; is true
+PASS return (0==1) || 1; is true
+PASS if ((0==1) || 1) return true; return false; is true
+PASS var k = 0; while ((0==1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==1) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=1) || 1; is true
+PASS if ((0!=1) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=1) || 1; ) if (k++) return true; return false; is true
+PASS return (0===1) || 1; is true
+PASS if ((0===1) || 1) return true; return false; is true
+PASS var k = 0; while ((0===1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===1) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==1) || 1; is true
+PASS if ((0!==1) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==1) || 1; ) if (k++) return true; return false; is true
+PASS return (0==1) && 1; is false
+PASS if ((0==1) && 1) return true; return false; is false
+PASS var k = 0; while ((0==1) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==1) && 1; ) if (k++) return true; return false; is false
+PASS return (0!=1) && 1; is true
+PASS if ((0!=1) && 1) return true; return false; is true
+PASS var k = 0; while ((0!=1) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=1) && 1; ) if (k++) return true; return false; is true
+PASS return (0===1) && 1; is false
+PASS if ((0===1) && 1) return true; return false; is false
+PASS var k = 0; while ((0===1) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0===1) && 1; ) if (k++) return true; return false; is false
+PASS return (0!==1) && 1; is true
+PASS if ((0!==1) && 1) return true; return false; is true
+PASS var k = 0; while ((0!==1) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==1) && 1; ) if (k++) return true; return false; is true
+PASS return (0==1) || 1; is true
+PASS if ((0==1) || 1) return true; return false; is true
+PASS var k = 0; while ((0==1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==1) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=1) || 1; is true
+PASS if ((0!=1) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=1) || 1; ) if (k++) return true; return false; is true
+PASS return (0===1) || 1; is true
+PASS if ((0===1) || 1) return true; return false; is true
+PASS var k = 0; while ((0===1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===1) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==1) || 1; is true
+PASS if ((0!==1) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==1) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0==1); is true
+PASS if (1 || (0==1)) return true; return false; is true
+PASS var k = 0; while (1 || (0==1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0==1); ) if (k++) return true; return false; is true
+PASS return 1 || (0!=1); is true
+PASS if (1 || (0!=1)) return true; return false; is true
+PASS var k = 0; while (1 || (0!=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!=1); ) if (k++) return true; return false; is true
+PASS return 1 || (0===1); is true
+PASS if (1 || (0===1)) return true; return false; is true
+PASS var k = 0; while (1 || (0===1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0===1); ) if (k++) return true; return false; is true
+PASS return 1 || (0!==1); is true
+PASS if (1 || (0!==1)) return true; return false; is true
+PASS var k = 0; while (1 || (0!==1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!==1); ) if (k++) return true; return false; is true
+PASS return 1 && (0==1); is false
+PASS if (1 && (0==1)) return true; return false; is false
+PASS var k = 0; while (1 && (0==1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0==1); ) if (k++) return true; return false; is false
+PASS return 1 && (0!=1); is true
+PASS if (1 && (0!=1)) return true; return false; is true
+PASS var k = 0; while (1 && (0!=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!=1); ) if (k++) return true; return false; is true
+PASS return 1 && (0===1); is false
+PASS if (1 && (0===1)) return true; return false; is false
+PASS var k = 0; while (1 && (0===1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0===1); ) if (k++) return true; return false; is false
+PASS return 1 && (0!==1); is true
+PASS if (1 && (0!==1)) return true; return false; is true
+PASS var k = 0; while (1 && (0!==1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!==1); ) if (k++) return true; return false; is true
+PASS return (0==0); is true
+PASS if ((0==0)) return true; return false; is true
+PASS var k = 0; while ((0==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==0); ) if (k++) return true; return false; is true
+PASS return (0!=0); is false
+PASS if ((0!=0)) return true; return false; is false
+PASS var k = 0; while ((0!=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0!=0); ) if (k++) return true; return false; is false
+PASS return (0===0); is true
+PASS if ((0===0)) return true; return false; is true
+PASS var k = 0; while ((0===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===0); ) if (k++) return true; return false; is true
+PASS return (0!==0); is false
+PASS if ((0!==0)) return true; return false; is false
+PASS var k = 0; while ((0!==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0!==0); ) if (k++) return true; return false; is false
+PASS return (0==0) || 1; is true
+PASS if ((0==0) || 1) return true; return false; is true
+PASS var k = 0; while ((0==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==0) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=0) || 1; is true
+PASS if ((0!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (0===0) || 1; is true
+PASS if ((0===0) || 1) return true; return false; is true
+PASS var k = 0; while ((0===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===0) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==0) || 1; is true
+PASS if ((0!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==0) || 1; ) if (k++) return true; return false; is true
+PASS return (0==0) && 1; is true
+PASS if ((0==0) && 1) return true; return false; is true
+PASS var k = 0; while ((0==0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==0) && 1; ) if (k++) return true; return false; is true
+PASS return (0!=0) && 1; is false
+PASS if ((0!=0) && 1) return true; return false; is false
+PASS var k = 0; while ((0!=0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0!=0) && 1; ) if (k++) return true; return false; is false
+PASS return (0===0) && 1; is true
+PASS if ((0===0) && 1) return true; return false; is true
+PASS var k = 0; while ((0===0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===0) && 1; ) if (k++) return true; return false; is true
+PASS return (0!==0) && 1; is false
+PASS if ((0!==0) && 1) return true; return false; is false
+PASS var k = 0; while ((0!==0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0!==0) && 1; ) if (k++) return true; return false; is false
+PASS return (0==0) || 1; is true
+PASS if ((0==0) || 1) return true; return false; is true
+PASS var k = 0; while ((0==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==0) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=0) || 1; is true
+PASS if ((0!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (0===0) || 1; is true
+PASS if ((0===0) || 1) return true; return false; is true
+PASS var k = 0; while ((0===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===0) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==0) || 1; is true
+PASS if ((0!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0==0); is true
+PASS if (1 || (0==0)) return true; return false; is true
+PASS var k = 0; while (1 || (0==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0==0); ) if (k++) return true; return false; is true
+PASS return 1 || (0!=0); is true
+PASS if (1 || (0!=0)) return true; return false; is true
+PASS var k = 0; while (1 || (0!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!=0); ) if (k++) return true; return false; is true
+PASS return 1 || (0===0); is true
+PASS if (1 || (0===0)) return true; return false; is true
+PASS var k = 0; while (1 || (0===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0===0); ) if (k++) return true; return false; is true
+PASS return 1 || (0!==0); is true
+PASS if (1 || (0!==0)) return true; return false; is true
+PASS var k = 0; while (1 || (0!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!==0); ) if (k++) return true; return false; is true
+PASS return 1 && (0==0); is true
+PASS if (1 && (0==0)) return true; return false; is true
+PASS var k = 0; while (1 && (0==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0==0); ) if (k++) return true; return false; is true
+PASS return 1 && (0!=0); is false
+PASS if (1 && (0!=0)) return true; return false; is false
+PASS var k = 0; while (1 && (0!=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0!=0); ) if (k++) return true; return false; is false
+PASS return 1 && (0===0); is true
+PASS if (1 && (0===0)) return true; return false; is true
+PASS var k = 0; while (1 && (0===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0===0); ) if (k++) return true; return false; is true
+PASS return 1 && (0!==0); is false
+PASS if (1 && (0!==0)) return true; return false; is false
+PASS var k = 0; while (1 && (0!==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0!==0); ) if (k++) return true; return false; is false
+PASS return (1==0); is false
+PASS if ((1==0)) return true; return false; is false
+PASS var k = 0; while ((1==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1==0); ) if (k++) return true; return false; is false
+PASS return (1!=0); is true
+PASS if ((1!=0)) return true; return false; is true
+PASS var k = 0; while ((1!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!=0); ) if (k++) return true; return false; is true
+PASS return (1===0); is false
+PASS if ((1===0)) return true; return false; is false
+PASS var k = 0; while ((1===0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1===0); ) if (k++) return true; return false; is false
+PASS return (1!==0); is true
+PASS if ((1!==0)) return true; return false; is true
+PASS var k = 0; while ((1!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!==0); ) if (k++) return true; return false; is true
+PASS return (1==0) || 1; is true
+PASS if ((1==0) || 1) return true; return false; is true
+PASS var k = 0; while ((1==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1==0) || 1; ) if (k++) return true; return false; is true
+PASS return (1!=0) || 1; is true
+PASS if ((1!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((1!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (1===0) || 1; is true
+PASS if ((1===0) || 1) return true; return false; is true
+PASS var k = 0; while ((1===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1===0) || 1; ) if (k++) return true; return false; is true
+PASS return (1!==0) || 1; is true
+PASS if ((1!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((1!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!==0) || 1; ) if (k++) return true; return false; is true
+PASS return (1==0) && 1; is false
+PASS if ((1==0) && 1) return true; return false; is false
+PASS var k = 0; while ((1==0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1==0) && 1; ) if (k++) return true; return false; is false
+PASS return (1!=0) && 1; is true
+PASS if ((1!=0) && 1) return true; return false; is true
+PASS var k = 0; while ((1!=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!=0) && 1; ) if (k++) return true; return false; is true
+PASS return (1===0) && 1; is false
+PASS if ((1===0) && 1) return true; return false; is false
+PASS var k = 0; while ((1===0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1===0) && 1; ) if (k++) return true; return false; is false
+PASS return (1!==0) && 1; is true
+PASS if ((1!==0) && 1) return true; return false; is true
+PASS var k = 0; while ((1!==0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!==0) && 1; ) if (k++) return true; return false; is true
+PASS return (1==0) || 1; is true
+PASS if ((1==0) || 1) return true; return false; is true
+PASS var k = 0; while ((1==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1==0) || 1; ) if (k++) return true; return false; is true
+PASS return (1!=0) || 1; is true
+PASS if ((1!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((1!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (1===0) || 1; is true
+PASS if ((1===0) || 1) return true; return false; is true
+PASS var k = 0; while ((1===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1===0) || 1; ) if (k++) return true; return false; is true
+PASS return (1!==0) || 1; is true
+PASS if ((1!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((1!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!==0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (1==0); is true
+PASS if (1 || (1==0)) return true; return false; is true
+PASS var k = 0; while (1 || (1==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1==0); ) if (k++) return true; return false; is true
+PASS return 1 || (1!=0); is true
+PASS if (1 || (1!=0)) return true; return false; is true
+PASS var k = 0; while (1 || (1!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1!=0); ) if (k++) return true; return false; is true
+PASS return 1 || (1===0); is true
+PASS if (1 || (1===0)) return true; return false; is true
+PASS var k = 0; while (1 || (1===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1===0); ) if (k++) return true; return false; is true
+PASS return 1 || (1!==0); is true
+PASS if (1 || (1!==0)) return true; return false; is true
+PASS var k = 0; while (1 || (1!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1!==0); ) if (k++) return true; return false; is true
+PASS return 1 && (1==0); is false
+PASS if (1 && (1==0)) return true; return false; is false
+PASS var k = 0; while (1 && (1==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1==0); ) if (k++) return true; return false; is false
+PASS return 1 && (1!=0); is true
+PASS if (1 && (1!=0)) return true; return false; is true
+PASS var k = 0; while (1 && (1!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1!=0); ) if (k++) return true; return false; is true
+PASS return 1 && (1===0); is false
+PASS if (1 && (1===0)) return true; return false; is false
+PASS var k = 0; while (1 && (1===0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1===0); ) if (k++) return true; return false; is false
+PASS return 1 && (1!==0); is true
+PASS if (1 && (1!==0)) return true; return false; is true
+PASS var k = 0; while (1 && (1!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1!==0); ) if (k++) return true; return false; is true
+PASS return (Zero==1); is false
+PASS if ((Zero==1)) return true; return false; is false
+PASS var k = 0; while ((Zero==1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero==1); ) if (k++) return true; return false; is false
+PASS return (Zero!=1); is true
+PASS if ((Zero!=1)) return true; return false; is true
+PASS var k = 0; while ((Zero!=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!=1); ) if (k++) return true; return false; is true
+PASS return (Zero===1); is false
+PASS if ((Zero===1)) return true; return false; is false
+PASS var k = 0; while ((Zero===1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero===1); ) if (k++) return true; return false; is false
+PASS return (Zero!==1); is true
+PASS if ((Zero!==1)) return true; return false; is true
+PASS var k = 0; while ((Zero!==1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!==1); ) if (k++) return true; return false; is true
+PASS return (Zero==1) || 1; is true
+PASS if ((Zero==1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero==1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero==1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero!=1) || 1; is true
+PASS if ((Zero!=1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero!=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!=1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero===1) || 1; is true
+PASS if ((Zero===1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero===1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero===1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero!==1) || 1; is true
+PASS if ((Zero!==1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero!==1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!==1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero==1) && 1; is false
+PASS if ((Zero==1) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero==1) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero==1) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero!=1) && 1; is true
+PASS if ((Zero!=1) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero!=1) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!=1) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero===1) && 1; is false
+PASS if ((Zero===1) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero===1) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero===1) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero!==1) && 1; is true
+PASS if ((Zero!==1) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero!==1) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!==1) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero==1) || 1; is true
+PASS if ((Zero==1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero==1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero==1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero!=1) || 1; is true
+PASS if ((Zero!=1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero!=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!=1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero===1) || 1; is true
+PASS if ((Zero===1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero===1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero===1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero!==1) || 1; is true
+PASS if ((Zero!==1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero!==1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!==1) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero==1); is true
+PASS if (1 || (Zero==1)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero==1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero==1); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero!=1); is true
+PASS if (1 || (Zero!=1)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero!=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero!=1); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero===1); is true
+PASS if (1 || (Zero===1)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero===1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero===1); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero!==1); is true
+PASS if (1 || (Zero!==1)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero!==1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero!==1); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero==1); is false
+PASS if (1 && (Zero==1)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero==1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero==1); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero!=1); is true
+PASS if (1 && (Zero!=1)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero!=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero!=1); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero===1); is false
+PASS if (1 && (Zero===1)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero===1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero===1); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero!==1); is true
+PASS if (1 && (Zero!==1)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero!==1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero!==1); ) if (k++) return true; return false; is true
+PASS return (Zero==0); is true
+PASS if ((Zero==0)) return true; return false; is true
+PASS var k = 0; while ((Zero==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero==0); ) if (k++) return true; return false; is true
+PASS return (Zero!=0); is false
+PASS if ((Zero!=0)) return true; return false; is false
+PASS var k = 0; while ((Zero!=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero!=0); ) if (k++) return true; return false; is false
+PASS return (Zero===0); is true
+PASS if ((Zero===0)) return true; return false; is true
+PASS var k = 0; while ((Zero===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero===0); ) if (k++) return true; return false; is true
+PASS return (Zero!==0); is false
+PASS if ((Zero!==0)) return true; return false; is false
+PASS var k = 0; while ((Zero!==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero!==0); ) if (k++) return true; return false; is false
+PASS return (Zero==0) || 1; is true
+PASS if ((Zero==0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero==0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero!=0) || 1; is true
+PASS if ((Zero!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero===0) || 1; is true
+PASS if ((Zero===0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero===0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero!==0) || 1; is true
+PASS if ((Zero!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!==0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero==0) && 1; is true
+PASS if ((Zero==0) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero==0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero==0) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero!=0) && 1; is false
+PASS if ((Zero!=0) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero!=0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero!=0) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero===0) && 1; is true
+PASS if ((Zero===0) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero===0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero===0) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero!==0) && 1; is false
+PASS if ((Zero!==0) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero!==0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero!==0) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero==0) || 1; is true
+PASS if ((Zero==0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero==0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero!=0) || 1; is true
+PASS if ((Zero!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero===0) || 1; is true
+PASS if ((Zero===0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero===0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero!==0) || 1; is true
+PASS if ((Zero!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero!==0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero==0); is true
+PASS if (1 || (Zero==0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero==0); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero!=0); is true
+PASS if (1 || (Zero!=0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero!=0); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero===0); is true
+PASS if (1 || (Zero===0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero===0); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero!==0); is true
+PASS if (1 || (Zero!==0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero!==0); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero==0); is true
+PASS if (1 && (Zero==0)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero==0); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero!=0); is false
+PASS if (1 && (Zero!=0)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero!=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero!=0); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero===0); is true
+PASS if (1 && (Zero===0)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero===0); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero!==0); is false
+PASS if (1 && (Zero!==0)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero!==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero!==0); ) if (k++) return true; return false; is false
+PASS return (1==Zero); is false
+PASS if ((1==Zero)) return true; return false; is false
+PASS var k = 0; while ((1==Zero)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1==Zero); ) if (k++) return true; return false; is false
+PASS return (1!=Zero); is true
+PASS if ((1!=Zero)) return true; return false; is true
+PASS var k = 0; while ((1!=Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!=Zero); ) if (k++) return true; return false; is true
+PASS return (1===Zero); is false
+PASS if ((1===Zero)) return true; return false; is false
+PASS var k = 0; while ((1===Zero)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1===Zero); ) if (k++) return true; return false; is false
+PASS return (1!==Zero); is true
+PASS if ((1!==Zero)) return true; return false; is true
+PASS var k = 0; while ((1!==Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!==Zero); ) if (k++) return true; return false; is true
+PASS return (1==Zero) || 1; is true
+PASS if ((1==Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1==Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1==Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1!=Zero) || 1; is true
+PASS if ((1!=Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1!=Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!=Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1===Zero) || 1; is true
+PASS if ((1===Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1===Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1===Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1!==Zero) || 1; is true
+PASS if ((1!==Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1!==Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!==Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1==Zero) && 1; is false
+PASS if ((1==Zero) && 1) return true; return false; is false
+PASS var k = 0; while ((1==Zero) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1==Zero) && 1; ) if (k++) return true; return false; is false
+PASS return (1!=Zero) && 1; is true
+PASS if ((1!=Zero) && 1) return true; return false; is true
+PASS var k = 0; while ((1!=Zero) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!=Zero) && 1; ) if (k++) return true; return false; is true
+PASS return (1===Zero) && 1; is false
+PASS if ((1===Zero) && 1) return true; return false; is false
+PASS var k = 0; while ((1===Zero) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1===Zero) && 1; ) if (k++) return true; return false; is false
+PASS return (1!==Zero) && 1; is true
+PASS if ((1!==Zero) && 1) return true; return false; is true
+PASS var k = 0; while ((1!==Zero) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!==Zero) && 1; ) if (k++) return true; return false; is true
+PASS return (1==Zero) || 1; is true
+PASS if ((1==Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1==Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1==Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1!=Zero) || 1; is true
+PASS if ((1!=Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1!=Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!=Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1===Zero) || 1; is true
+PASS if ((1===Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1===Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1===Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1!==Zero) || 1; is true
+PASS if ((1!==Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1!==Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1!==Zero) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (1==Zero); is true
+PASS if (1 || (1==Zero)) return true; return false; is true
+PASS var k = 0; while (1 || (1==Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1==Zero); ) if (k++) return true; return false; is true
+PASS return 1 || (1!=Zero); is true
+PASS if (1 || (1!=Zero)) return true; return false; is true
+PASS var k = 0; while (1 || (1!=Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1!=Zero); ) if (k++) return true; return false; is true
+PASS return 1 || (1===Zero); is true
+PASS if (1 || (1===Zero)) return true; return false; is true
+PASS var k = 0; while (1 || (1===Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1===Zero); ) if (k++) return true; return false; is true
+PASS return 1 || (1!==Zero); is true
+PASS if (1 || (1!==Zero)) return true; return false; is true
+PASS var k = 0; while (1 || (1!==Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1!==Zero); ) if (k++) return true; return false; is true
+PASS return 1 && (1==Zero); is false
+PASS if (1 && (1==Zero)) return true; return false; is false
+PASS var k = 0; while (1 && (1==Zero)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1==Zero); ) if (k++) return true; return false; is false
+PASS return 1 && (1!=Zero); is true
+PASS if (1 && (1!=Zero)) return true; return false; is true
+PASS var k = 0; while (1 && (1!=Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1!=Zero); ) if (k++) return true; return false; is true
+PASS return 1 && (1===Zero); is false
+PASS if (1 && (1===Zero)) return true; return false; is false
+PASS var k = 0; while (1 && (1===Zero)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1===Zero); ) if (k++) return true; return false; is false
+PASS return 1 && (1!==Zero); is true
+PASS if (1 && (1!==Zero)) return true; return false; is true
+PASS var k = 0; while (1 && (1!==Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1!==Zero); ) if (k++) return true; return false; is true
+PASS return (0==One); is false
+PASS if ((0==One)) return true; return false; is false
+PASS var k = 0; while ((0==One)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==One); ) if (k++) return true; return false; is false
+PASS return (0!=One); is true
+PASS if ((0!=One)) return true; return false; is true
+PASS var k = 0; while ((0!=One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=One); ) if (k++) return true; return false; is true
+PASS return (0===One); is false
+PASS if ((0===One)) return true; return false; is false
+PASS var k = 0; while ((0===One)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0===One); ) if (k++) return true; return false; is false
+PASS return (0!==One); is true
+PASS if ((0!==One)) return true; return false; is true
+PASS var k = 0; while ((0!==One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==One); ) if (k++) return true; return false; is true
+PASS return (0==One) || 1; is true
+PASS if ((0==One) || 1) return true; return false; is true
+PASS var k = 0; while ((0==One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==One) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=One) || 1; is true
+PASS if ((0!=One) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=One) || 1; ) if (k++) return true; return false; is true
+PASS return (0===One) || 1; is true
+PASS if ((0===One) || 1) return true; return false; is true
+PASS var k = 0; while ((0===One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===One) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==One) || 1; is true
+PASS if ((0!==One) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==One) || 1; ) if (k++) return true; return false; is true
+PASS return (0==One) && 1; is false
+PASS if ((0==One) && 1) return true; return false; is false
+PASS var k = 0; while ((0==One) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0==One) && 1; ) if (k++) return true; return false; is false
+PASS return (0!=One) && 1; is true
+PASS if ((0!=One) && 1) return true; return false; is true
+PASS var k = 0; while ((0!=One) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=One) && 1; ) if (k++) return true; return false; is true
+PASS return (0===One) && 1; is false
+PASS if ((0===One) && 1) return true; return false; is false
+PASS var k = 0; while ((0===One) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0===One) && 1; ) if (k++) return true; return false; is false
+PASS return (0!==One) && 1; is true
+PASS if ((0!==One) && 1) return true; return false; is true
+PASS var k = 0; while ((0!==One) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==One) && 1; ) if (k++) return true; return false; is true
+PASS return (0==One) || 1; is true
+PASS if ((0==One) || 1) return true; return false; is true
+PASS var k = 0; while ((0==One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0==One) || 1; ) if (k++) return true; return false; is true
+PASS return (0!=One) || 1; is true
+PASS if ((0!=One) || 1) return true; return false; is true
+PASS var k = 0; while ((0!=One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!=One) || 1; ) if (k++) return true; return false; is true
+PASS return (0===One) || 1; is true
+PASS if ((0===One) || 1) return true; return false; is true
+PASS var k = 0; while ((0===One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0===One) || 1; ) if (k++) return true; return false; is true
+PASS return (0!==One) || 1; is true
+PASS if ((0!==One) || 1) return true; return false; is true
+PASS var k = 0; while ((0!==One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0!==One) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0==One); is true
+PASS if (1 || (0==One)) return true; return false; is true
+PASS var k = 0; while (1 || (0==One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0==One); ) if (k++) return true; return false; is true
+PASS return 1 || (0!=One); is true
+PASS if (1 || (0!=One)) return true; return false; is true
+PASS var k = 0; while (1 || (0!=One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!=One); ) if (k++) return true; return false; is true
+PASS return 1 || (0===One); is true
+PASS if (1 || (0===One)) return true; return false; is true
+PASS var k = 0; while (1 || (0===One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0===One); ) if (k++) return true; return false; is true
+PASS return 1 || (0!==One); is true
+PASS if (1 || (0!==One)) return true; return false; is true
+PASS var k = 0; while (1 || (0!==One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0!==One); ) if (k++) return true; return false; is true
+PASS return 1 && (0==One); is false
+PASS if (1 && (0==One)) return true; return false; is false
+PASS var k = 0; while (1 && (0==One)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0==One); ) if (k++) return true; return false; is false
+PASS return 1 && (0!=One); is true
+PASS if (1 && (0!=One)) return true; return false; is true
+PASS var k = 0; while (1 && (0!=One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!=One); ) if (k++) return true; return false; is true
+PASS return 1 && (0===One); is false
+PASS if (1 && (0===One)) return true; return false; is false
+PASS var k = 0; while (1 && (0===One)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0===One); ) if (k++) return true; return false; is false
+PASS return 1 && (0!==One); is true
+PASS if (1 && (0!==One)) return true; return false; is true
+PASS var k = 0; while (1 && (0!==One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0!==One); ) if (k++) return true; return false; is true
+PASS return (One==0); is false
+PASS if ((One==0)) return true; return false; is false
+PASS var k = 0; while ((One==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (One==0); ) if (k++) return true; return false; is false
+PASS return (One!=0); is true
+PASS if ((One!=0)) return true; return false; is true
+PASS var k = 0; while ((One!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One!=0); ) if (k++) return true; return false; is true
+PASS return (One===0); is false
+PASS if ((One===0)) return true; return false; is false
+PASS var k = 0; while ((One===0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (One===0); ) if (k++) return true; return false; is false
+PASS return (One!==0); is true
+PASS if ((One!==0)) return true; return false; is true
+PASS var k = 0; while ((One!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One!==0); ) if (k++) return true; return false; is true
+PASS return (One==0) || 1; is true
+PASS if ((One==0) || 1) return true; return false; is true
+PASS var k = 0; while ((One==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One==0) || 1; ) if (k++) return true; return false; is true
+PASS return (One!=0) || 1; is true
+PASS if ((One!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((One!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (One===0) || 1; is true
+PASS if ((One===0) || 1) return true; return false; is true
+PASS var k = 0; while ((One===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One===0) || 1; ) if (k++) return true; return false; is true
+PASS return (One!==0) || 1; is true
+PASS if ((One!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((One!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One!==0) || 1; ) if (k++) return true; return false; is true
+PASS return (One==0) && 1; is false
+PASS if ((One==0) && 1) return true; return false; is false
+PASS var k = 0; while ((One==0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (One==0) && 1; ) if (k++) return true; return false; is false
+PASS return (One!=0) && 1; is true
+PASS if ((One!=0) && 1) return true; return false; is true
+PASS var k = 0; while ((One!=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One!=0) && 1; ) if (k++) return true; return false; is true
+PASS return (One===0) && 1; is false
+PASS if ((One===0) && 1) return true; return false; is false
+PASS var k = 0; while ((One===0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (One===0) && 1; ) if (k++) return true; return false; is false
+PASS return (One!==0) && 1; is true
+PASS if ((One!==0) && 1) return true; return false; is true
+PASS var k = 0; while ((One!==0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One!==0) && 1; ) if (k++) return true; return false; is true
+PASS return (One==0) || 1; is true
+PASS if ((One==0) || 1) return true; return false; is true
+PASS var k = 0; while ((One==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One==0) || 1; ) if (k++) return true; return false; is true
+PASS return (One!=0) || 1; is true
+PASS if ((One!=0) || 1) return true; return false; is true
+PASS var k = 0; while ((One!=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One!=0) || 1; ) if (k++) return true; return false; is true
+PASS return (One===0) || 1; is true
+PASS if ((One===0) || 1) return true; return false; is true
+PASS var k = 0; while ((One===0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One===0) || 1; ) if (k++) return true; return false; is true
+PASS return (One!==0) || 1; is true
+PASS if ((One!==0) || 1) return true; return false; is true
+PASS var k = 0; while ((One!==0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One!==0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (One==0); is true
+PASS if (1 || (One==0)) return true; return false; is true
+PASS var k = 0; while (1 || (One==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (One==0); ) if (k++) return true; return false; is true
+PASS return 1 || (One!=0); is true
+PASS if (1 || (One!=0)) return true; return false; is true
+PASS var k = 0; while (1 || (One!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (One!=0); ) if (k++) return true; return false; is true
+PASS return 1 || (One===0); is true
+PASS if (1 || (One===0)) return true; return false; is true
+PASS var k = 0; while (1 || (One===0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (One===0); ) if (k++) return true; return false; is true
+PASS return 1 || (One!==0); is true
+PASS if (1 || (One!==0)) return true; return false; is true
+PASS var k = 0; while (1 || (One!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (One!==0); ) if (k++) return true; return false; is true
+PASS return 1 && (One==0); is false
+PASS if (1 && (One==0)) return true; return false; is false
+PASS var k = 0; while (1 && (One==0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (One==0); ) if (k++) return true; return false; is false
+PASS return 1 && (One!=0); is true
+PASS if (1 && (One!=0)) return true; return false; is true
+PASS var k = 0; while (1 && (One!=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (One!=0); ) if (k++) return true; return false; is true
+PASS return 1 && (One===0); is false
+PASS if (1 && (One===0)) return true; return false; is false
+PASS var k = 0; while (1 && (One===0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (One===0); ) if (k++) return true; return false; is false
+PASS return 1 && (One!==0); is true
+PASS if (1 && (One!==0)) return true; return false; is true
+PASS var k = 0; while (1 && (One!==0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (One!==0); ) if (k++) return true; return false; is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/comparison-operators-greater-expected.txt b/test/webkit/comparison-operators-greater-expected.txt
new file mode 100644 (file)
index 0000000..29c0274
--- /dev/null
@@ -0,0 +1,1934 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+test that comparison operators work correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS return ("a">"b"); is false
+PASS if (("a">"b")) return true; return false; is false
+PASS var k = 0; while (("a">"b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">"b"); ) if (k++) return true; return false; is false
+PASS return ("a">="b"); is false
+PASS if (("a">="b")) return true; return false; is false
+PASS var k = 0; while (("a">="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">="b"); ) if (k++) return true; return false; is false
+PASS return ("a">"b") || 1; is true
+PASS if (("a">"b") || 1) return true; return false; is true
+PASS var k = 0; while (("a">"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">"b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">="b") || 1; is true
+PASS if (("a">="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a">="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">"b") && 1; is false
+PASS if (("a">"b") && 1) return true; return false; is false
+PASS var k = 0; while (("a">"b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">"b") && 1; ) if (k++) return true; return false; is false
+PASS return ("a">="b") && 1; is false
+PASS if (("a">="b") && 1) return true; return false; is false
+PASS var k = 0; while (("a">="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">="b") && 1; ) if (k++) return true; return false; is false
+PASS return ("a">"b") || 1; is true
+PASS if (("a">"b") || 1) return true; return false; is true
+PASS var k = 0; while (("a">"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">"b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">="b") || 1; is true
+PASS if (("a">="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a">="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a">"b"); is true
+PASS if (1 || ("a">"b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a">"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">"b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a">="b"); is true
+PASS if (1 || ("a">="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a">="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">="b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a">"b"); is false
+PASS if (1 && ("a">"b")) return true; return false; is false
+PASS var k = 0; while (1 && ("a">"b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">"b"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a">="b"); is false
+PASS if (1 && ("a">="b")) return true; return false; is false
+PASS var k = 0; while (1 && ("a">="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">="b"); ) if (k++) return true; return false; is false
+PASS return ("a">"a"); is false
+PASS if (("a">"a")) return true; return false; is false
+PASS var k = 0; while (("a">"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">"a"); ) if (k++) return true; return false; is false
+PASS return ("a">="a"); is true
+PASS if (("a">="a")) return true; return false; is true
+PASS var k = 0; while (("a">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">="a"); ) if (k++) return true; return false; is true
+PASS return ("a">"a") || 1; is true
+PASS if (("a">"a") || 1) return true; return false; is true
+PASS var k = 0; while (("a">"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">="a") || 1; is true
+PASS if (("a">="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a">="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">"a") && 1; is false
+PASS if (("a">"a") && 1) return true; return false; is false
+PASS var k = 0; while (("a">"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">"a") && 1; ) if (k++) return true; return false; is false
+PASS return ("a">="a") && 1; is true
+PASS if (("a">="a") && 1) return true; return false; is true
+PASS var k = 0; while (("a">="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("a">"a") || 1; is true
+PASS if (("a">"a") || 1) return true; return false; is true
+PASS var k = 0; while (("a">"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">="a") || 1; is true
+PASS if (("a">="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a">="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a">"a"); is true
+PASS if (1 || ("a">"a")) return true; return false; is true
+PASS var k = 0; while (1 || ("a">"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">"a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a">="a"); is true
+PASS if (1 || ("a">="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("a">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a">"a"); is false
+PASS if (1 && ("a">"a")) return true; return false; is false
+PASS var k = 0; while (1 && ("a">"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">"a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a">="a"); is true
+PASS if (1 && ("a">="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("a">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a">="a"); ) if (k++) return true; return false; is true
+PASS return ("b">"a"); is true
+PASS if (("b">"a")) return true; return false; is true
+PASS var k = 0; while (("b">"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">"a"); ) if (k++) return true; return false; is true
+PASS return ("b">="a"); is true
+PASS if (("b">="a")) return true; return false; is true
+PASS var k = 0; while (("b">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">="a"); ) if (k++) return true; return false; is true
+PASS return ("b">"a") || 1; is true
+PASS if (("b">"a") || 1) return true; return false; is true
+PASS var k = 0; while (("b">"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b">="a") || 1; is true
+PASS if (("b">="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b">="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b">"a") && 1; is true
+PASS if (("b">"a") && 1) return true; return false; is true
+PASS var k = 0; while (("b">"a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">"a") && 1; ) if (k++) return true; return false; is true
+PASS return ("b">="a") && 1; is true
+PASS if (("b">="a") && 1) return true; return false; is true
+PASS var k = 0; while (("b">="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("b">"a") || 1; is true
+PASS if (("b">"a") || 1) return true; return false; is true
+PASS var k = 0; while (("b">"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b">="a") || 1; is true
+PASS if (("b">="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b">="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b">"a"); is true
+PASS if (1 || ("b">"a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b">"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b">"a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b">="a"); is true
+PASS if (1 || ("b">="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b">="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b">"a"); is true
+PASS if (1 && ("b">"a")) return true; return false; is true
+PASS var k = 0; while (1 && ("b">"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b">"a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b">="a"); is true
+PASS if (1 && ("b">="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("b">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b">="a"); ) if (k++) return true; return false; is true
+PASS return (letterA>"b"); is false
+PASS if ((letterA>"b")) return true; return false; is false
+PASS var k = 0; while ((letterA>"b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>"b"); ) if (k++) return true; return false; is false
+PASS return (letterA>="b"); is false
+PASS if ((letterA>="b")) return true; return false; is false
+PASS var k = 0; while ((letterA>="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>="b"); ) if (k++) return true; return false; is false
+PASS return (letterA>"b") || 1; is true
+PASS if ((letterA>"b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>"b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>="b") || 1; is true
+PASS if ((letterA>="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>"b") && 1; is false
+PASS if ((letterA>"b") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>"b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>"b") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>="b") && 1; is false
+PASS if ((letterA>="b") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>="b") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>"b") || 1; is true
+PASS if ((letterA>"b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>"b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>="b") || 1; is true
+PASS if ((letterA>="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>"b"); is true
+PASS if (1 || (letterA>"b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>"b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>="b"); is true
+PASS if (1 || (letterA>="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>="b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA>"b"); is false
+PASS if (1 && (letterA>"b")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>"b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>"b"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA>="b"); is false
+PASS if (1 && (letterA>="b")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>="b"); ) if (k++) return true; return false; is false
+PASS return (letterA>"a"); is false
+PASS if ((letterA>"a")) return true; return false; is false
+PASS var k = 0; while ((letterA>"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>"a"); ) if (k++) return true; return false; is false
+PASS return (letterA>="a"); is true
+PASS if ((letterA>="a")) return true; return false; is true
+PASS var k = 0; while ((letterA>="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="a"); ) if (k++) return true; return false; is true
+PASS return (letterA>"a") || 1; is true
+PASS if ((letterA>"a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>"a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>="a") || 1; is true
+PASS if ((letterA>="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>"a") && 1; is false
+PASS if ((letterA>"a") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>"a") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>="a") && 1; is true
+PASS if ((letterA>="a") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="a") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA>"a") || 1; is true
+PASS if ((letterA>"a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>"a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>="a") || 1; is true
+PASS if ((letterA>="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>"a"); is true
+PASS if (1 || (letterA>"a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>"a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>="a"); is true
+PASS if (1 || (letterA>="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA>"a"); is false
+PASS if (1 && (letterA>"a")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>"a"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA>="a"); is true
+PASS if (1 && (letterA>="a")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA>="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA>="a"); ) if (k++) return true; return false; is true
+PASS return ("b">"a"); is true
+PASS if (("b">"a")) return true; return false; is true
+PASS var k = 0; while (("b">"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">"a"); ) if (k++) return true; return false; is true
+PASS return ("b">="a"); is true
+PASS if (("b">="a")) return true; return false; is true
+PASS var k = 0; while (("b">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">="a"); ) if (k++) return true; return false; is true
+PASS return ("b">"a") || 1; is true
+PASS if (("b">"a") || 1) return true; return false; is true
+PASS var k = 0; while (("b">"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b">="a") || 1; is true
+PASS if (("b">="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b">="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b">"a") && 1; is true
+PASS if (("b">"a") && 1) return true; return false; is true
+PASS var k = 0; while (("b">"a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">"a") && 1; ) if (k++) return true; return false; is true
+PASS return ("b">="a") && 1; is true
+PASS if (("b">="a") && 1) return true; return false; is true
+PASS var k = 0; while (("b">="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("b">"a") || 1; is true
+PASS if (("b">"a") || 1) return true; return false; is true
+PASS var k = 0; while (("b">"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b">="a") || 1; is true
+PASS if (("b">="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b">="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b">"a"); is true
+PASS if (1 || ("b">"a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b">"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b">"a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b">="a"); is true
+PASS if (1 || ("b">="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b">="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b">"a"); is true
+PASS if (1 && ("b">"a")) return true; return false; is true
+PASS var k = 0; while (1 && ("b">"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b">"a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b">="a"); is true
+PASS if (1 && ("b">="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("b">="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b">="a"); ) if (k++) return true; return false; is true
+PASS return (letterA>"b"); is false
+PASS if ((letterA>"b")) return true; return false; is false
+PASS var k = 0; while ((letterA>"b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>"b"); ) if (k++) return true; return false; is false
+PASS return (letterA>="b"); is false
+PASS if ((letterA>="b")) return true; return false; is false
+PASS var k = 0; while ((letterA>="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>="b"); ) if (k++) return true; return false; is false
+PASS return (letterA>"b") || 1; is true
+PASS if ((letterA>"b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>"b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>="b") || 1; is true
+PASS if ((letterA>="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>"b") && 1; is false
+PASS if ((letterA>"b") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>"b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>"b") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>="b") && 1; is false
+PASS if ((letterA>="b") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>="b") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>"b") || 1; is true
+PASS if ((letterA>"b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>"b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>="b") || 1; is true
+PASS if ((letterA>="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>"b"); is true
+PASS if (1 || (letterA>"b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>"b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>="b"); is true
+PASS if (1 || (letterA>="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>="b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA>"b"); is false
+PASS if (1 && (letterA>"b")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>"b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>"b"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA>="b"); is false
+PASS if (1 && (letterA>="b")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>="b"); ) if (k++) return true; return false; is false
+PASS return (letterA>letterA); is false
+PASS if ((letterA>letterA)) return true; return false; is false
+PASS var k = 0; while ((letterA>letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>letterA); ) if (k++) return true; return false; is false
+PASS return (letterA>=letterA); is true
+PASS if ((letterA>=letterA)) return true; return false; is true
+PASS var k = 0; while ((letterA>=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=letterA); ) if (k++) return true; return false; is true
+PASS return (letterA>letterA) || 1; is true
+PASS if ((letterA>letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>=letterA) || 1; is true
+PASS if ((letterA>=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>letterA) && 1; is false
+PASS if ((letterA>letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>=letterA) && 1; is true
+PASS if ((letterA>=letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA>=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA>letterA) || 1; is true
+PASS if ((letterA>letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>=letterA) || 1; is true
+PASS if ((letterA>=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>letterA); is true
+PASS if (1 || (letterA>letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>=letterA); is true
+PASS if (1 || (letterA>=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA>letterA); is false
+PASS if (1 && (letterA>letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA>=letterA); is true
+PASS if (1 && (letterA>=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA>=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA>=letterA); ) if (k++) return true; return false; is true
+PASS return ("b">letterA); is true
+PASS if (("b">letterA)) return true; return false; is true
+PASS var k = 0; while (("b">letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">letterA); ) if (k++) return true; return false; is true
+PASS return ("b">=letterA); is true
+PASS if (("b">=letterA)) return true; return false; is true
+PASS var k = 0; while (("b">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">=letterA); ) if (k++) return true; return false; is true
+PASS return ("b">letterA) || 1; is true
+PASS if (("b">letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b">letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b">=letterA) || 1; is true
+PASS if (("b">=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b">=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b">letterA) && 1; is true
+PASS if (("b">letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("b">letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("b">=letterA) && 1; is true
+PASS if (("b">=letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("b">=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("b">letterA) || 1; is true
+PASS if (("b">letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b">letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b">=letterA) || 1; is true
+PASS if (("b">=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b">=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b">letterA); is true
+PASS if (1 || ("b">letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b">letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b">letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b">=letterA); is true
+PASS if (1 || ("b">=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b">=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b">letterA); is true
+PASS if (1 && ("b">letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("b">letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b">letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b">=letterA); is true
+PASS if (1 && ("b">=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("b">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b">=letterA); ) if (k++) return true; return false; is true
+PASS return ("a">"b"); is false
+PASS if (("a">"b")) return true; return false; is false
+PASS var k = 0; while (("a">"b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">"b"); ) if (k++) return true; return false; is false
+PASS return ("a">="b"); is false
+PASS if (("a">="b")) return true; return false; is false
+PASS var k = 0; while (("a">="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">="b"); ) if (k++) return true; return false; is false
+PASS return ("a">"b") || 1; is true
+PASS if (("a">"b") || 1) return true; return false; is true
+PASS var k = 0; while (("a">"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">"b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">="b") || 1; is true
+PASS if (("a">="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a">="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">"b") && 1; is false
+PASS if (("a">"b") && 1) return true; return false; is false
+PASS var k = 0; while (("a">"b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">"b") && 1; ) if (k++) return true; return false; is false
+PASS return ("a">="b") && 1; is false
+PASS if (("a">="b") && 1) return true; return false; is false
+PASS var k = 0; while (("a">="b") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">="b") && 1; ) if (k++) return true; return false; is false
+PASS return ("a">"b") || 1; is true
+PASS if (("a">"b") || 1) return true; return false; is true
+PASS var k = 0; while (("a">"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">"b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a">="b") || 1; is true
+PASS if (("a">="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a">="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a">"b"); is true
+PASS if (1 || ("a">"b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a">"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">"b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a">="b"); is true
+PASS if (1 || ("a">="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a">="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">="b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a">"b"); is false
+PASS if (1 && ("a">"b")) return true; return false; is false
+PASS var k = 0; while (1 && ("a">"b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">"b"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a">="b"); is false
+PASS if (1 && ("a">="b")) return true; return false; is false
+PASS var k = 0; while (1 && ("a">="b")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">="b"); ) if (k++) return true; return false; is false
+PASS return ("a">letterA); is false
+PASS if (("a">letterA)) return true; return false; is false
+PASS var k = 0; while (("a">letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">letterA); ) if (k++) return true; return false; is false
+PASS return ("a">=letterA); is true
+PASS if (("a">=letterA)) return true; return false; is true
+PASS var k = 0; while (("a">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=letterA); ) if (k++) return true; return false; is true
+PASS return ("a">letterA) || 1; is true
+PASS if (("a">letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a">letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">=letterA) || 1; is true
+PASS if (("a">=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a">=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">letterA) && 1; is false
+PASS if (("a">letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("a">letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("a">=letterA) && 1; is true
+PASS if (("a">=letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("a">=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("a">letterA) || 1; is true
+PASS if (("a">letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a">letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">=letterA) || 1; is true
+PASS if (("a">=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a">=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a">letterA); is true
+PASS if (1 || ("a">letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a">letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a">=letterA); is true
+PASS if (1 || ("a">=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a">letterA); is false
+PASS if (1 && ("a">letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("a">letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("a">=letterA); is true
+PASS if (1 && ("a">=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("a">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a">=letterA); ) if (k++) return true; return false; is true
+PASS return ("b">letterA); is true
+PASS if (("b">letterA)) return true; return false; is true
+PASS var k = 0; while (("b">letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">letterA); ) if (k++) return true; return false; is true
+PASS return ("b">=letterA); is true
+PASS if (("b">=letterA)) return true; return false; is true
+PASS var k = 0; while (("b">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">=letterA); ) if (k++) return true; return false; is true
+PASS return ("b">letterA) || 1; is true
+PASS if (("b">letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b">letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b">=letterA) || 1; is true
+PASS if (("b">=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b">=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b">letterA) && 1; is true
+PASS if (("b">letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("b">letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("b">=letterA) && 1; is true
+PASS if (("b">=letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("b">=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("b">letterA) || 1; is true
+PASS if (("b">letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b">letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b">=letterA) || 1; is true
+PASS if (("b">=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b">=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b">=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b">letterA); is true
+PASS if (1 || ("b">letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b">letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b">letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b">=letterA); is true
+PASS if (1 || ("b">=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b">=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b">letterA); is true
+PASS if (1 && ("b">letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("b">letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b">letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b">=letterA); is true
+PASS if (1 && ("b">=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("b">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("b">=letterA); ) if (k++) return true; return false; is true
+PASS return ("a">0); is false
+PASS if (("a">0)) return true; return false; is false
+PASS var k = 0; while (("a">0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">0); ) if (k++) return true; return false; is false
+PASS return ("a">=0); is false
+PASS if (("a">=0)) return true; return false; is false
+PASS var k = 0; while (("a">=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">=0); ) if (k++) return true; return false; is false
+PASS return ("a">0) || 1; is true
+PASS if (("a">0) || 1) return true; return false; is true
+PASS var k = 0; while (("a">0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">=0) || 1; is true
+PASS if (("a">=0) || 1) return true; return false; is true
+PASS var k = 0; while (("a">=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">0) && 1; is false
+PASS if (("a">0) && 1) return true; return false; is false
+PASS var k = 0; while (("a">0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">0) && 1; ) if (k++) return true; return false; is false
+PASS return ("a">=0) && 1; is false
+PASS if (("a">=0) && 1) return true; return false; is false
+PASS var k = 0; while (("a">=0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">=0) && 1; ) if (k++) return true; return false; is false
+PASS return ("a">0) || 1; is true
+PASS if (("a">0) || 1) return true; return false; is true
+PASS var k = 0; while (("a">0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">=0) || 1; is true
+PASS if (("a">=0) || 1) return true; return false; is true
+PASS var k = 0; while (("a">=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a">0); is true
+PASS if (1 || ("a">0)) return true; return false; is true
+PASS var k = 0; while (1 || ("a">0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">0); ) if (k++) return true; return false; is true
+PASS return 1 || ("a">=0); is true
+PASS if (1 || ("a">=0)) return true; return false; is true
+PASS var k = 0; while (1 || ("a">=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">=0); ) if (k++) return true; return false; is true
+PASS return 1 && ("a">0); is false
+PASS if (1 && ("a">0)) return true; return false; is false
+PASS var k = 0; while (1 && ("a">0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">0); ) if (k++) return true; return false; is false
+PASS return 1 && ("a">=0); is false
+PASS if (1 && ("a">=0)) return true; return false; is false
+PASS var k = 0; while (1 && ("a">=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">=0); ) if (k++) return true; return false; is false
+PASS return (0>"a"); is false
+PASS if ((0>"a")) return true; return false; is false
+PASS var k = 0; while ((0>"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>"a"); ) if (k++) return true; return false; is false
+PASS return (0>="a"); is false
+PASS if ((0>="a")) return true; return false; is false
+PASS var k = 0; while ((0>="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>="a"); ) if (k++) return true; return false; is false
+PASS return (0>"a") || 1; is true
+PASS if ((0>"a") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"a") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="a") || 1; is true
+PASS if ((0>="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0>"a") && 1; is false
+PASS if ((0>"a") && 1) return true; return false; is false
+PASS var k = 0; while ((0>"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>"a") && 1; ) if (k++) return true; return false; is false
+PASS return (0>="a") && 1; is false
+PASS if ((0>="a") && 1) return true; return false; is false
+PASS var k = 0; while ((0>="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>="a") && 1; ) if (k++) return true; return false; is false
+PASS return (0>"a") || 1; is true
+PASS if ((0>"a") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"a") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="a") || 1; is true
+PASS if ((0>="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>"a"); is true
+PASS if (1 || (0>"a")) return true; return false; is true
+PASS var k = 0; while (1 || (0>"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>"a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0>="a"); is true
+PASS if (1 || (0>="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0>="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (0>"a"); is false
+PASS if (1 && (0>"a")) return true; return false; is false
+PASS var k = 0; while (1 && (0>"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>"a"); ) if (k++) return true; return false; is false
+PASS return 1 && (0>="a"); is false
+PASS if (1 && (0>="a")) return true; return false; is false
+PASS var k = 0; while (1 && (0>="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>="a"); ) if (k++) return true; return false; is false
+PASS return (0>"0"); is false
+PASS if ((0>"0")) return true; return false; is false
+PASS var k = 0; while ((0>"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>"0"); ) if (k++) return true; return false; is false
+PASS return (0>="0"); is true
+PASS if ((0>="0")) return true; return false; is true
+PASS var k = 0; while ((0>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="0"); ) if (k++) return true; return false; is true
+PASS return (0>"0") || 1; is true
+PASS if ((0>"0") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"0") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="0") || 1; is true
+PASS if ((0>="0") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="0") || 1; ) if (k++) return true; return false; is true
+PASS return (0>"0") && 1; is false
+PASS if ((0>"0") && 1) return true; return false; is false
+PASS var k = 0; while ((0>"0") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>"0") && 1; ) if (k++) return true; return false; is false
+PASS return (0>="0") && 1; is true
+PASS if ((0>="0") && 1) return true; return false; is true
+PASS var k = 0; while ((0>="0") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="0") && 1; ) if (k++) return true; return false; is true
+PASS return (0>"0") || 1; is true
+PASS if ((0>"0") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"0") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="0") || 1; is true
+PASS if ((0>="0") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="0") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>"0"); is true
+PASS if (1 || (0>"0")) return true; return false; is true
+PASS var k = 0; while (1 || (0>"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>"0"); ) if (k++) return true; return false; is true
+PASS return 1 || (0>="0"); is true
+PASS if (1 || (0>="0")) return true; return false; is true
+PASS var k = 0; while (1 || (0>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>="0"); ) if (k++) return true; return false; is true
+PASS return 1 && (0>"0"); is false
+PASS if (1 && (0>"0")) return true; return false; is false
+PASS var k = 0; while (1 && (0>"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>"0"); ) if (k++) return true; return false; is false
+PASS return 1 && (0>="0"); is true
+PASS if (1 && (0>="0")) return true; return false; is true
+PASS var k = 0; while (1 && (0>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0>="0"); ) if (k++) return true; return false; is true
+PASS return (Zero>letter0); is false
+PASS if ((Zero>letter0)) return true; return false; is false
+PASS var k = 0; while ((Zero>letter0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>letter0); ) if (k++) return true; return false; is false
+PASS return (Zero>=letter0); is true
+PASS if ((Zero>=letter0)) return true; return false; is true
+PASS var k = 0; while ((Zero>=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=letter0); ) if (k++) return true; return false; is true
+PASS return (Zero>letter0) || 1; is true
+PASS if ((Zero>letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>=letter0) || 1; is true
+PASS if ((Zero>=letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>=letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>letter0) && 1; is false
+PASS if ((Zero>letter0) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero>letter0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>letter0) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero>=letter0) && 1; is true
+PASS if ((Zero>=letter0) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero>=letter0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=letter0) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero>letter0) || 1; is true
+PASS if ((Zero>letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>=letter0) || 1; is true
+PASS if ((Zero>=letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>=letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=letter0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero>letter0); is true
+PASS if (1 || (Zero>letter0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero>letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero>letter0); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero>=letter0); is true
+PASS if (1 || (Zero>=letter0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero>=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero>=letter0); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero>letter0); is false
+PASS if (1 && (Zero>letter0)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero>letter0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero>letter0); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero>=letter0); is true
+PASS if (1 && (Zero>=letter0)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero>=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero>=letter0); ) if (k++) return true; return false; is true
+PASS return (0>letter0); is false
+PASS if ((0>letter0)) return true; return false; is false
+PASS var k = 0; while ((0>letter0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>letter0); ) if (k++) return true; return false; is false
+PASS return (0>=letter0); is true
+PASS if ((0>=letter0)) return true; return false; is true
+PASS var k = 0; while ((0>=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=letter0); ) if (k++) return true; return false; is true
+PASS return (0>letter0) || 1; is true
+PASS if ((0>letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((0>letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=letter0) || 1; is true
+PASS if ((0>=letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (0>letter0) && 1; is false
+PASS if ((0>letter0) && 1) return true; return false; is false
+PASS var k = 0; while ((0>letter0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>letter0) && 1; ) if (k++) return true; return false; is false
+PASS return (0>=letter0) && 1; is true
+PASS if ((0>=letter0) && 1) return true; return false; is true
+PASS var k = 0; while ((0>=letter0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=letter0) && 1; ) if (k++) return true; return false; is true
+PASS return (0>letter0) || 1; is true
+PASS if ((0>letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((0>letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=letter0) || 1; is true
+PASS if ((0>=letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=letter0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>letter0); is true
+PASS if (1 || (0>letter0)) return true; return false; is true
+PASS var k = 0; while (1 || (0>letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>letter0); ) if (k++) return true; return false; is true
+PASS return 1 || (0>=letter0); is true
+PASS if (1 || (0>=letter0)) return true; return false; is true
+PASS var k = 0; while (1 || (0>=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>=letter0); ) if (k++) return true; return false; is true
+PASS return 1 && (0>letter0); is false
+PASS if (1 && (0>letter0)) return true; return false; is false
+PASS var k = 0; while (1 && (0>letter0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>letter0); ) if (k++) return true; return false; is false
+PASS return 1 && (0>=letter0); is true
+PASS if (1 && (0>=letter0)) return true; return false; is true
+PASS var k = 0; while (1 && (0>=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0>=letter0); ) if (k++) return true; return false; is true
+PASS return (Zero>"0"); is false
+PASS if ((Zero>"0")) return true; return false; is false
+PASS var k = 0; while ((Zero>"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>"0"); ) if (k++) return true; return false; is false
+PASS return (Zero>="0"); is true
+PASS if ((Zero>="0")) return true; return false; is true
+PASS var k = 0; while ((Zero>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>="0"); ) if (k++) return true; return false; is true
+PASS return (Zero>"0") || 1; is true
+PASS if ((Zero>"0") || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>"0") || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>="0") || 1; is true
+PASS if ((Zero>="0") || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>="0") || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>"0") && 1; is false
+PASS if ((Zero>"0") && 1) return true; return false; is false
+PASS var k = 0; while ((Zero>"0") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>"0") && 1; ) if (k++) return true; return false; is false
+PASS return (Zero>="0") && 1; is true
+PASS if ((Zero>="0") && 1) return true; return false; is true
+PASS var k = 0; while ((Zero>="0") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>="0") && 1; ) if (k++) return true; return false; is true
+PASS return (Zero>"0") || 1; is true
+PASS if ((Zero>"0") || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>"0") || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>="0") || 1; is true
+PASS if ((Zero>="0") || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>="0") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero>"0"); is true
+PASS if (1 || (Zero>"0")) return true; return false; is true
+PASS var k = 0; while (1 || (Zero>"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero>"0"); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero>="0"); is true
+PASS if (1 || (Zero>="0")) return true; return false; is true
+PASS var k = 0; while (1 || (Zero>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero>="0"); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero>"0"); is false
+PASS if (1 && (Zero>"0")) return true; return false; is false
+PASS var k = 0; while (1 && (Zero>"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero>"0"); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero>="0"); is true
+PASS if (1 && (Zero>="0")) return true; return false; is true
+PASS var k = 0; while (1 && (Zero>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero>="0"); ) if (k++) return true; return false; is true
+PASS return (-1>"0"); is false
+PASS if ((-1>"0")) return true; return false; is false
+PASS var k = 0; while ((-1>"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (-1>"0"); ) if (k++) return true; return false; is false
+PASS return (-1>="0"); is false
+PASS if ((-1>="0")) return true; return false; is false
+PASS var k = 0; while ((-1>="0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (-1>="0"); ) if (k++) return true; return false; is false
+PASS return (-1>"0") || 1; is true
+PASS if ((-1>"0") || 1) return true; return false; is true
+PASS var k = 0; while ((-1>"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1>"0") || 1; ) if (k++) return true; return false; is true
+PASS return (-1>="0") || 1; is true
+PASS if ((-1>="0") || 1) return true; return false; is true
+PASS var k = 0; while ((-1>="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1>="0") || 1; ) if (k++) return true; return false; is true
+PASS return (-1>"0") && 1; is false
+PASS if ((-1>"0") && 1) return true; return false; is false
+PASS var k = 0; while ((-1>"0") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (-1>"0") && 1; ) if (k++) return true; return false; is false
+PASS return (-1>="0") && 1; is false
+PASS if ((-1>="0") && 1) return true; return false; is false
+PASS var k = 0; while ((-1>="0") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (-1>="0") && 1; ) if (k++) return true; return false; is false
+PASS return (-1>"0") || 1; is true
+PASS if ((-1>"0") || 1) return true; return false; is true
+PASS var k = 0; while ((-1>"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1>"0") || 1; ) if (k++) return true; return false; is true
+PASS return (-1>="0") || 1; is true
+PASS if ((-1>="0") || 1) return true; return false; is true
+PASS var k = 0; while ((-1>="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1>="0") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (-1>"0"); is true
+PASS if (1 || (-1>"0")) return true; return false; is true
+PASS var k = 0; while (1 || (-1>"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (-1>"0"); ) if (k++) return true; return false; is true
+PASS return 1 || (-1>="0"); is true
+PASS if (1 || (-1>="0")) return true; return false; is true
+PASS var k = 0; while (1 || (-1>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (-1>="0"); ) if (k++) return true; return false; is true
+PASS return 1 && (-1>"0"); is false
+PASS if (1 && (-1>"0")) return true; return false; is false
+PASS var k = 0; while (1 && (-1>"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (-1>"0"); ) if (k++) return true; return false; is false
+PASS return 1 && (-1>="0"); is false
+PASS if (1 && (-1>="0")) return true; return false; is false
+PASS var k = 0; while (1 && (-1>="0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (-1>="0"); ) if (k++) return true; return false; is false
+PASS return (1>"0"); is true
+PASS if ((1>"0")) return true; return false; is true
+PASS var k = 0; while ((1>"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>"0"); ) if (k++) return true; return false; is true
+PASS return (1>="0"); is true
+PASS if ((1>="0")) return true; return false; is true
+PASS var k = 0; while ((1>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>="0"); ) if (k++) return true; return false; is true
+PASS return (1>"0") || 1; is true
+PASS if ((1>"0") || 1) return true; return false; is true
+PASS var k = 0; while ((1>"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>"0") || 1; ) if (k++) return true; return false; is true
+PASS return (1>="0") || 1; is true
+PASS if ((1>="0") || 1) return true; return false; is true
+PASS var k = 0; while ((1>="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>="0") || 1; ) if (k++) return true; return false; is true
+PASS return (1>"0") && 1; is true
+PASS if ((1>"0") && 1) return true; return false; is true
+PASS var k = 0; while ((1>"0") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>"0") && 1; ) if (k++) return true; return false; is true
+PASS return (1>="0") && 1; is true
+PASS if ((1>="0") && 1) return true; return false; is true
+PASS var k = 0; while ((1>="0") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>="0") && 1; ) if (k++) return true; return false; is true
+PASS return (1>"0") || 1; is true
+PASS if ((1>"0") || 1) return true; return false; is true
+PASS var k = 0; while ((1>"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>"0") || 1; ) if (k++) return true; return false; is true
+PASS return (1>="0") || 1; is true
+PASS if ((1>="0") || 1) return true; return false; is true
+PASS var k = 0; while ((1>="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>="0") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (1>"0"); is true
+PASS if (1 || (1>"0")) return true; return false; is true
+PASS var k = 0; while (1 || (1>"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1>"0"); ) if (k++) return true; return false; is true
+PASS return 1 || (1>="0"); is true
+PASS if (1 || (1>="0")) return true; return false; is true
+PASS var k = 0; while (1 || (1>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1>="0"); ) if (k++) return true; return false; is true
+PASS return 1 && (1>"0"); is true
+PASS if (1 && (1>"0")) return true; return false; is true
+PASS var k = 0; while (1 && (1>"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1>"0"); ) if (k++) return true; return false; is true
+PASS return 1 && (1>="0"); is true
+PASS if (1 && (1>="0")) return true; return false; is true
+PASS var k = 0; while (1 && (1>="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1>="0"); ) if (k++) return true; return false; is true
+PASS return (0>"-1"); is true
+PASS if ((0>"-1")) return true; return false; is true
+PASS var k = 0; while ((0>"-1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"-1"); ) if (k++) return true; return false; is true
+PASS return (0>="-1"); is true
+PASS if ((0>="-1")) return true; return false; is true
+PASS var k = 0; while ((0>="-1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="-1"); ) if (k++) return true; return false; is true
+PASS return (0>"-1") || 1; is true
+PASS if ((0>"-1") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"-1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"-1") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="-1") || 1; is true
+PASS if ((0>="-1") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="-1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="-1") || 1; ) if (k++) return true; return false; is true
+PASS return (0>"-1") && 1; is true
+PASS if ((0>"-1") && 1) return true; return false; is true
+PASS var k = 0; while ((0>"-1") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"-1") && 1; ) if (k++) return true; return false; is true
+PASS return (0>="-1") && 1; is true
+PASS if ((0>="-1") && 1) return true; return false; is true
+PASS var k = 0; while ((0>="-1") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="-1") && 1; ) if (k++) return true; return false; is true
+PASS return (0>"-1") || 1; is true
+PASS if ((0>"-1") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"-1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"-1") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="-1") || 1; is true
+PASS if ((0>="-1") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="-1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="-1") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>"-1"); is true
+PASS if (1 || (0>"-1")) return true; return false; is true
+PASS var k = 0; while (1 || (0>"-1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>"-1"); ) if (k++) return true; return false; is true
+PASS return 1 || (0>="-1"); is true
+PASS if (1 || (0>="-1")) return true; return false; is true
+PASS var k = 0; while (1 || (0>="-1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>="-1"); ) if (k++) return true; return false; is true
+PASS return 1 && (0>"-1"); is true
+PASS if (1 && (0>"-1")) return true; return false; is true
+PASS var k = 0; while (1 && (0>"-1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0>"-1"); ) if (k++) return true; return false; is true
+PASS return 1 && (0>="-1"); is true
+PASS if (1 && (0>="-1")) return true; return false; is true
+PASS var k = 0; while (1 && (0>="-1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0>="-1"); ) if (k++) return true; return false; is true
+PASS return (0>"1"); is false
+PASS if ((0>"1")) return true; return false; is false
+PASS var k = 0; while ((0>"1")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>"1"); ) if (k++) return true; return false; is false
+PASS return (0>="1"); is false
+PASS if ((0>="1")) return true; return false; is false
+PASS var k = 0; while ((0>="1")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>="1"); ) if (k++) return true; return false; is false
+PASS return (0>"1") || 1; is true
+PASS if ((0>"1") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"1") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="1") || 1; is true
+PASS if ((0>="1") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="1") || 1; ) if (k++) return true; return false; is true
+PASS return (0>"1") && 1; is false
+PASS if ((0>"1") && 1) return true; return false; is false
+PASS var k = 0; while ((0>"1") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>"1") && 1; ) if (k++) return true; return false; is false
+PASS return (0>="1") && 1; is false
+PASS if ((0>="1") && 1) return true; return false; is false
+PASS var k = 0; while ((0>="1") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>="1") && 1; ) if (k++) return true; return false; is false
+PASS return (0>"1") || 1; is true
+PASS if ((0>"1") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"1") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="1") || 1; is true
+PASS if ((0>="1") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="1") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>"1"); is true
+PASS if (1 || (0>"1")) return true; return false; is true
+PASS var k = 0; while (1 || (0>"1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>"1"); ) if (k++) return true; return false; is true
+PASS return 1 || (0>="1"); is true
+PASS if (1 || (0>="1")) return true; return false; is true
+PASS var k = 0; while (1 || (0>="1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>="1"); ) if (k++) return true; return false; is true
+PASS return 1 && (0>"1"); is false
+PASS if (1 && (0>"1")) return true; return false; is false
+PASS var k = 0; while (1 && (0>"1")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>"1"); ) if (k++) return true; return false; is false
+PASS return 1 && (0>="1"); is false
+PASS if (1 && (0>="1")) return true; return false; is false
+PASS var k = 0; while (1 && (0>="1")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>="1"); ) if (k++) return true; return false; is false
+PASS return (letterA>0); is false
+PASS if ((letterA>0)) return true; return false; is false
+PASS var k = 0; while ((letterA>0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>0); ) if (k++) return true; return false; is false
+PASS return (letterA>=0); is false
+PASS if ((letterA>=0)) return true; return false; is false
+PASS var k = 0; while ((letterA>=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>=0); ) if (k++) return true; return false; is false
+PASS return (letterA>0) || 1; is true
+PASS if ((letterA>0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>=0) || 1; is true
+PASS if ((letterA>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>0) && 1; is false
+PASS if ((letterA>0) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>0) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>=0) && 1; is false
+PASS if ((letterA>=0) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>=0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>=0) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>0) || 1; is true
+PASS if ((letterA>0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>=0) || 1; is true
+PASS if ((letterA>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>0); is true
+PASS if (1 || (letterA>0)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>0); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>=0); is true
+PASS if (1 || (letterA>=0)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>=0); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA>0); is false
+PASS if (1 && (letterA>0)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>0); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA>=0); is false
+PASS if (1 && (letterA>=0)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>=0); ) if (k++) return true; return false; is false
+PASS return (letterA>"a"); is false
+PASS if ((letterA>"a")) return true; return false; is false
+PASS var k = 0; while ((letterA>"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>"a"); ) if (k++) return true; return false; is false
+PASS return (letterA>="a"); is true
+PASS if ((letterA>="a")) return true; return false; is true
+PASS var k = 0; while ((letterA>="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="a"); ) if (k++) return true; return false; is true
+PASS return (letterA>"a") || 1; is true
+PASS if ((letterA>"a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>"a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>="a") || 1; is true
+PASS if ((letterA>="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>"a") && 1; is false
+PASS if ((letterA>"a") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>"a") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>="a") && 1; is true
+PASS if ((letterA>="a") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="a") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA>"a") || 1; is true
+PASS if ((letterA>"a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>"a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>="a") || 1; is true
+PASS if ((letterA>="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>"a"); is true
+PASS if (1 || (letterA>"a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>"a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>="a"); is true
+PASS if (1 || (letterA>="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA>"a"); is false
+PASS if (1 && (letterA>"a")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>"a"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA>="a"); is true
+PASS if (1 && (letterA>="a")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA>="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA>="a"); ) if (k++) return true; return false; is true
+PASS return (0>"a"); is false
+PASS if ((0>"a")) return true; return false; is false
+PASS var k = 0; while ((0>"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>"a"); ) if (k++) return true; return false; is false
+PASS return (0>="a"); is false
+PASS if ((0>="a")) return true; return false; is false
+PASS var k = 0; while ((0>="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>="a"); ) if (k++) return true; return false; is false
+PASS return (0>"a") || 1; is true
+PASS if ((0>"a") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"a") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="a") || 1; is true
+PASS if ((0>="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0>"a") && 1; is false
+PASS if ((0>"a") && 1) return true; return false; is false
+PASS var k = 0; while ((0>"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>"a") && 1; ) if (k++) return true; return false; is false
+PASS return (0>="a") && 1; is false
+PASS if ((0>="a") && 1) return true; return false; is false
+PASS var k = 0; while ((0>="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>="a") && 1; ) if (k++) return true; return false; is false
+PASS return (0>"a") || 1; is true
+PASS if ((0>"a") || 1) return true; return false; is true
+PASS var k = 0; while ((0>"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>"a") || 1; ) if (k++) return true; return false; is true
+PASS return (0>="a") || 1; is true
+PASS if ((0>="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0>="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>"a"); is true
+PASS if (1 || (0>"a")) return true; return false; is true
+PASS var k = 0; while (1 || (0>"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>"a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0>="a"); is true
+PASS if (1 || (0>="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0>="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (0>"a"); is false
+PASS if (1 && (0>"a")) return true; return false; is false
+PASS var k = 0; while (1 && (0>"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>"a"); ) if (k++) return true; return false; is false
+PASS return 1 && (0>="a"); is false
+PASS if (1 && (0>="a")) return true; return false; is false
+PASS var k = 0; while (1 && (0>="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>="a"); ) if (k++) return true; return false; is false
+PASS return (letterA>letterA); is false
+PASS if ((letterA>letterA)) return true; return false; is false
+PASS var k = 0; while ((letterA>letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>letterA); ) if (k++) return true; return false; is false
+PASS return (letterA>=letterA); is true
+PASS if ((letterA>=letterA)) return true; return false; is true
+PASS var k = 0; while ((letterA>=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=letterA); ) if (k++) return true; return false; is true
+PASS return (letterA>letterA) || 1; is true
+PASS if ((letterA>letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>=letterA) || 1; is true
+PASS if ((letterA>=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>letterA) && 1; is false
+PASS if ((letterA>letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA>letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA>letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA>=letterA) && 1; is true
+PASS if ((letterA>=letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA>=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA>letterA) || 1; is true
+PASS if ((letterA>letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA>=letterA) || 1; is true
+PASS if ((letterA>=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA>=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA>=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>letterA); is true
+PASS if (1 || (letterA>letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA>=letterA); is true
+PASS if (1 || (letterA>=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA>=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA>=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA>letterA); is false
+PASS if (1 && (letterA>letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA>letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA>letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA>=letterA); is true
+PASS if (1 && (letterA>=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA>=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA>=letterA); ) if (k++) return true; return false; is true
+PASS return (0>letterA); is false
+PASS if ((0>letterA)) return true; return false; is false
+PASS var k = 0; while ((0>letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>letterA); ) if (k++) return true; return false; is false
+PASS return (0>=letterA); is false
+PASS if ((0>=letterA)) return true; return false; is false
+PASS var k = 0; while ((0>=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>=letterA); ) if (k++) return true; return false; is false
+PASS return (0>letterA) || 1; is true
+PASS if ((0>letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0>letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=letterA) || 1; is true
+PASS if ((0>=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0>letterA) && 1; is false
+PASS if ((0>letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0>letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0>=letterA) && 1; is false
+PASS if ((0>=letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0>=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0>letterA) || 1; is true
+PASS if ((0>letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0>letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=letterA) || 1; is true
+PASS if ((0>=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>letterA); is true
+PASS if (1 || (0>letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0>letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0>=letterA); is true
+PASS if (1 || (0>=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0>=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (0>letterA); is false
+PASS if (1 && (0>letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0>letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (0>=letterA); is false
+PASS if (1 && (0>=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0>=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>=letterA); ) if (k++) return true; return false; is false
+PASS return ("a">letterA); is false
+PASS if (("a">letterA)) return true; return false; is false
+PASS var k = 0; while (("a">letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">letterA); ) if (k++) return true; return false; is false
+PASS return ("a">=letterA); is true
+PASS if (("a">=letterA)) return true; return false; is true
+PASS var k = 0; while (("a">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=letterA); ) if (k++) return true; return false; is true
+PASS return ("a">letterA) || 1; is true
+PASS if (("a">letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a">letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">=letterA) || 1; is true
+PASS if (("a">=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a">=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">letterA) && 1; is false
+PASS if (("a">letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("a">letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a">letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("a">=letterA) && 1; is true
+PASS if (("a">=letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("a">=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("a">letterA) || 1; is true
+PASS if (("a">letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a">letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a">=letterA) || 1; is true
+PASS if (("a">=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a">=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a">=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a">letterA); is true
+PASS if (1 || ("a">letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a">letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a">=letterA); is true
+PASS if (1 || ("a">=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a">=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a">letterA); is false
+PASS if (1 && ("a">letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("a">letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a">letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("a">=letterA); is true
+PASS if (1 && ("a">=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("a">=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a">=letterA); ) if (k++) return true; return false; is true
+PASS return (0>letterA); is false
+PASS if ((0>letterA)) return true; return false; is false
+PASS var k = 0; while ((0>letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>letterA); ) if (k++) return true; return false; is false
+PASS return (0>=letterA); is false
+PASS if ((0>=letterA)) return true; return false; is false
+PASS var k = 0; while ((0>=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>=letterA); ) if (k++) return true; return false; is false
+PASS return (0>letterA) || 1; is true
+PASS if ((0>letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0>letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=letterA) || 1; is true
+PASS if ((0>=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0>letterA) && 1; is false
+PASS if ((0>letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0>letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0>=letterA) && 1; is false
+PASS if ((0>=letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0>=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0>letterA) || 1; is true
+PASS if ((0>letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0>letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=letterA) || 1; is true
+PASS if ((0>=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>letterA); is true
+PASS if (1 || (0>letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0>letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0>=letterA); is true
+PASS if (1 || (0>=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0>=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (0>letterA); is false
+PASS if (1 && (0>letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0>letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (0>=letterA); is false
+PASS if (1 && (0>=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0>=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>=letterA); ) if (k++) return true; return false; is false
+PASS return (0>1); is false
+PASS if ((0>1)) return true; return false; is false
+PASS var k = 0; while ((0>1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>1); ) if (k++) return true; return false; is false
+PASS return (0>=1); is false
+PASS if ((0>=1)) return true; return false; is false
+PASS var k = 0; while ((0>=1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>=1); ) if (k++) return true; return false; is false
+PASS return (0>1) || 1; is true
+PASS if ((0>1) || 1) return true; return false; is true
+PASS var k = 0; while ((0>1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>1) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=1) || 1; is true
+PASS if ((0>=1) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=1) || 1; ) if (k++) return true; return false; is true
+PASS return (0>1) && 1; is false
+PASS if ((0>1) && 1) return true; return false; is false
+PASS var k = 0; while ((0>1) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>1) && 1; ) if (k++) return true; return false; is false
+PASS return (0>=1) && 1; is false
+PASS if ((0>=1) && 1) return true; return false; is false
+PASS var k = 0; while ((0>=1) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>=1) && 1; ) if (k++) return true; return false; is false
+PASS return (0>1) || 1; is true
+PASS if ((0>1) || 1) return true; return false; is true
+PASS var k = 0; while ((0>1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>1) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=1) || 1; is true
+PASS if ((0>=1) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=1) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>1); is true
+PASS if (1 || (0>1)) return true; return false; is true
+PASS var k = 0; while (1 || (0>1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>1); ) if (k++) return true; return false; is true
+PASS return 1 || (0>=1); is true
+PASS if (1 || (0>=1)) return true; return false; is true
+PASS var k = 0; while (1 || (0>=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>=1); ) if (k++) return true; return false; is true
+PASS return 1 && (0>1); is false
+PASS if (1 && (0>1)) return true; return false; is false
+PASS var k = 0; while (1 && (0>1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>1); ) if (k++) return true; return false; is false
+PASS return 1 && (0>=1); is false
+PASS if (1 && (0>=1)) return true; return false; is false
+PASS var k = 0; while (1 && (0>=1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>=1); ) if (k++) return true; return false; is false
+PASS return (0>0); is false
+PASS if ((0>0)) return true; return false; is false
+PASS var k = 0; while ((0>0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>0); ) if (k++) return true; return false; is false
+PASS return (0>=0); is true
+PASS if ((0>=0)) return true; return false; is true
+PASS var k = 0; while ((0>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=0); ) if (k++) return true; return false; is true
+PASS return (0>0) || 1; is true
+PASS if ((0>0) || 1) return true; return false; is true
+PASS var k = 0; while ((0>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>0) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=0) || 1; is true
+PASS if ((0>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=0) || 1; ) if (k++) return true; return false; is true
+PASS return (0>0) && 1; is false
+PASS if ((0>0) && 1) return true; return false; is false
+PASS var k = 0; while ((0>0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>0) && 1; ) if (k++) return true; return false; is false
+PASS return (0>=0) && 1; is true
+PASS if ((0>=0) && 1) return true; return false; is true
+PASS var k = 0; while ((0>=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=0) && 1; ) if (k++) return true; return false; is true
+PASS return (0>0) || 1; is true
+PASS if ((0>0) || 1) return true; return false; is true
+PASS var k = 0; while ((0>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>0) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=0) || 1; is true
+PASS if ((0>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>0); is true
+PASS if (1 || (0>0)) return true; return false; is true
+PASS var k = 0; while (1 || (0>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>0); ) if (k++) return true; return false; is true
+PASS return 1 || (0>=0); is true
+PASS if (1 || (0>=0)) return true; return false; is true
+PASS var k = 0; while (1 || (0>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>=0); ) if (k++) return true; return false; is true
+PASS return 1 && (0>0); is false
+PASS if (1 && (0>0)) return true; return false; is false
+PASS var k = 0; while (1 && (0>0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>0); ) if (k++) return true; return false; is false
+PASS return 1 && (0>=0); is true
+PASS if (1 && (0>=0)) return true; return false; is true
+PASS var k = 0; while (1 && (0>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0>=0); ) if (k++) return true; return false; is true
+PASS return (1>0); is true
+PASS if ((1>0)) return true; return false; is true
+PASS var k = 0; while ((1>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>0); ) if (k++) return true; return false; is true
+PASS return (1>=0); is true
+PASS if ((1>=0)) return true; return false; is true
+PASS var k = 0; while ((1>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>=0); ) if (k++) return true; return false; is true
+PASS return (1>0) || 1; is true
+PASS if ((1>0) || 1) return true; return false; is true
+PASS var k = 0; while ((1>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>0) || 1; ) if (k++) return true; return false; is true
+PASS return (1>=0) || 1; is true
+PASS if ((1>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((1>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>=0) || 1; ) if (k++) return true; return false; is true
+PASS return (1>0) && 1; is true
+PASS if ((1>0) && 1) return true; return false; is true
+PASS var k = 0; while ((1>0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>0) && 1; ) if (k++) return true; return false; is true
+PASS return (1>=0) && 1; is true
+PASS if ((1>=0) && 1) return true; return false; is true
+PASS var k = 0; while ((1>=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>=0) && 1; ) if (k++) return true; return false; is true
+PASS return (1>0) || 1; is true
+PASS if ((1>0) || 1) return true; return false; is true
+PASS var k = 0; while ((1>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>0) || 1; ) if (k++) return true; return false; is true
+PASS return (1>=0) || 1; is true
+PASS if ((1>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((1>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (1>0); is true
+PASS if (1 || (1>0)) return true; return false; is true
+PASS var k = 0; while (1 || (1>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1>0); ) if (k++) return true; return false; is true
+PASS return 1 || (1>=0); is true
+PASS if (1 || (1>=0)) return true; return false; is true
+PASS var k = 0; while (1 || (1>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1>=0); ) if (k++) return true; return false; is true
+PASS return 1 && (1>0); is true
+PASS if (1 && (1>0)) return true; return false; is true
+PASS var k = 0; while (1 && (1>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1>0); ) if (k++) return true; return false; is true
+PASS return 1 && (1>=0); is true
+PASS if (1 && (1>=0)) return true; return false; is true
+PASS var k = 0; while (1 && (1>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1>=0); ) if (k++) return true; return false; is true
+PASS return (Zero>1); is false
+PASS if ((Zero>1)) return true; return false; is false
+PASS var k = 0; while ((Zero>1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>1); ) if (k++) return true; return false; is false
+PASS return (Zero>=1); is false
+PASS if ((Zero>=1)) return true; return false; is false
+PASS var k = 0; while ((Zero>=1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>=1); ) if (k++) return true; return false; is false
+PASS return (Zero>1) || 1; is true
+PASS if ((Zero>1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>=1) || 1; is true
+PASS if ((Zero>=1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>1) && 1; is false
+PASS if ((Zero>1) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero>1) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>1) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero>=1) && 1; is false
+PASS if ((Zero>=1) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero>=1) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>=1) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero>1) || 1; is true
+PASS if ((Zero>1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>=1) || 1; is true
+PASS if ((Zero>=1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=1) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero>1); is true
+PASS if (1 || (Zero>1)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero>1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero>1); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero>=1); is true
+PASS if (1 || (Zero>=1)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero>=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero>=1); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero>1); is false
+PASS if (1 && (Zero>1)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero>1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero>1); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero>=1); is false
+PASS if (1 && (Zero>=1)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero>=1)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero>=1); ) if (k++) return true; return false; is false
+PASS return (Zero>0); is false
+PASS if ((Zero>0)) return true; return false; is false
+PASS var k = 0; while ((Zero>0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>0); ) if (k++) return true; return false; is false
+PASS return (Zero>=0); is true
+PASS if ((Zero>=0)) return true; return false; is true
+PASS var k = 0; while ((Zero>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=0); ) if (k++) return true; return false; is true
+PASS return (Zero>0) || 1; is true
+PASS if ((Zero>0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>=0) || 1; is true
+PASS if ((Zero>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>0) && 1; is false
+PASS if ((Zero>0) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero>0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero>0) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero>=0) && 1; is true
+PASS if ((Zero>=0) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero>=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=0) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero>0) || 1; is true
+PASS if ((Zero>0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero>=0) || 1; is true
+PASS if ((Zero>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero>=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero>0); is true
+PASS if (1 || (Zero>0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero>0); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero>=0); is true
+PASS if (1 || (Zero>=0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero>=0); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero>0); is false
+PASS if (1 && (Zero>0)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero>0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero>0); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero>=0); is true
+PASS if (1 && (Zero>=0)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero>=0); ) if (k++) return true; return false; is true
+PASS return (1>Zero); is true
+PASS if ((1>Zero)) return true; return false; is true
+PASS var k = 0; while ((1>Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>Zero); ) if (k++) return true; return false; is true
+PASS return (1>=Zero); is true
+PASS if ((1>=Zero)) return true; return false; is true
+PASS var k = 0; while ((1>=Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>=Zero); ) if (k++) return true; return false; is true
+PASS return (1>Zero) || 1; is true
+PASS if ((1>Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1>Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1>=Zero) || 1; is true
+PASS if ((1>=Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1>=Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>=Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1>Zero) && 1; is true
+PASS if ((1>Zero) && 1) return true; return false; is true
+PASS var k = 0; while ((1>Zero) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>Zero) && 1; ) if (k++) return true; return false; is true
+PASS return (1>=Zero) && 1; is true
+PASS if ((1>=Zero) && 1) return true; return false; is true
+PASS var k = 0; while ((1>=Zero) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>=Zero) && 1; ) if (k++) return true; return false; is true
+PASS return (1>Zero) || 1; is true
+PASS if ((1>Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1>Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1>=Zero) || 1; is true
+PASS if ((1>=Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1>=Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1>=Zero) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (1>Zero); is true
+PASS if (1 || (1>Zero)) return true; return false; is true
+PASS var k = 0; while (1 || (1>Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1>Zero); ) if (k++) return true; return false; is true
+PASS return 1 || (1>=Zero); is true
+PASS if (1 || (1>=Zero)) return true; return false; is true
+PASS var k = 0; while (1 || (1>=Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1>=Zero); ) if (k++) return true; return false; is true
+PASS return 1 && (1>Zero); is true
+PASS if (1 && (1>Zero)) return true; return false; is true
+PASS var k = 0; while (1 && (1>Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1>Zero); ) if (k++) return true; return false; is true
+PASS return 1 && (1>=Zero); is true
+PASS if (1 && (1>=Zero)) return true; return false; is true
+PASS var k = 0; while (1 && (1>=Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (1>=Zero); ) if (k++) return true; return false; is true
+PASS return (0>One); is false
+PASS if ((0>One)) return true; return false; is false
+PASS var k = 0; while ((0>One)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>One); ) if (k++) return true; return false; is false
+PASS return (0>=One); is false
+PASS if ((0>=One)) return true; return false; is false
+PASS var k = 0; while ((0>=One)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>=One); ) if (k++) return true; return false; is false
+PASS return (0>One) || 1; is true
+PASS if ((0>One) || 1) return true; return false; is true
+PASS var k = 0; while ((0>One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>One) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=One) || 1; is true
+PASS if ((0>=One) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=One) || 1; ) if (k++) return true; return false; is true
+PASS return (0>One) && 1; is false
+PASS if ((0>One) && 1) return true; return false; is false
+PASS var k = 0; while ((0>One) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>One) && 1; ) if (k++) return true; return false; is false
+PASS return (0>=One) && 1; is false
+PASS if ((0>=One) && 1) return true; return false; is false
+PASS var k = 0; while ((0>=One) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0>=One) && 1; ) if (k++) return true; return false; is false
+PASS return (0>One) || 1; is true
+PASS if ((0>One) || 1) return true; return false; is true
+PASS var k = 0; while ((0>One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>One) || 1; ) if (k++) return true; return false; is true
+PASS return (0>=One) || 1; is true
+PASS if ((0>=One) || 1) return true; return false; is true
+PASS var k = 0; while ((0>=One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0>=One) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0>One); is true
+PASS if (1 || (0>One)) return true; return false; is true
+PASS var k = 0; while (1 || (0>One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>One); ) if (k++) return true; return false; is true
+PASS return 1 || (0>=One); is true
+PASS if (1 || (0>=One)) return true; return false; is true
+PASS var k = 0; while (1 || (0>=One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0>=One); ) if (k++) return true; return false; is true
+PASS return 1 && (0>One); is false
+PASS if (1 && (0>One)) return true; return false; is false
+PASS var k = 0; while (1 && (0>One)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>One); ) if (k++) return true; return false; is false
+PASS return 1 && (0>=One); is false
+PASS if (1 && (0>=One)) return true; return false; is false
+PASS var k = 0; while (1 && (0>=One)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0>=One); ) if (k++) return true; return false; is false
+PASS return (One>0); is true
+PASS if ((One>0)) return true; return false; is true
+PASS var k = 0; while ((One>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One>0); ) if (k++) return true; return false; is true
+PASS return (One>=0); is true
+PASS if ((One>=0)) return true; return false; is true
+PASS var k = 0; while ((One>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One>=0); ) if (k++) return true; return false; is true
+PASS return (One>0) || 1; is true
+PASS if ((One>0) || 1) return true; return false; is true
+PASS var k = 0; while ((One>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One>0) || 1; ) if (k++) return true; return false; is true
+PASS return (One>=0) || 1; is true
+PASS if ((One>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((One>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One>=0) || 1; ) if (k++) return true; return false; is true
+PASS return (One>0) && 1; is true
+PASS if ((One>0) && 1) return true; return false; is true
+PASS var k = 0; while ((One>0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One>0) && 1; ) if (k++) return true; return false; is true
+PASS return (One>=0) && 1; is true
+PASS if ((One>=0) && 1) return true; return false; is true
+PASS var k = 0; while ((One>=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One>=0) && 1; ) if (k++) return true; return false; is true
+PASS return (One>0) || 1; is true
+PASS if ((One>0) || 1) return true; return false; is true
+PASS var k = 0; while ((One>0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One>0) || 1; ) if (k++) return true; return false; is true
+PASS return (One>=0) || 1; is true
+PASS if ((One>=0) || 1) return true; return false; is true
+PASS var k = 0; while ((One>=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One>=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (One>0); is true
+PASS if (1 || (One>0)) return true; return false; is true
+PASS var k = 0; while (1 || (One>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (One>0); ) if (k++) return true; return false; is true
+PASS return 1 || (One>=0); is true
+PASS if (1 || (One>=0)) return true; return false; is true
+PASS var k = 0; while (1 || (One>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (One>=0); ) if (k++) return true; return false; is true
+PASS return 1 && (One>0); is true
+PASS if (1 && (One>0)) return true; return false; is true
+PASS var k = 0; while (1 && (One>0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (One>0); ) if (k++) return true; return false; is true
+PASS return 1 && (One>=0); is true
+PASS if (1 && (One>=0)) return true; return false; is true
+PASS var k = 0; while (1 && (One>=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (One>=0); ) if (k++) return true; return false; is true
+PASS 0 >= 0 is true
+PASS 1 >= 0 is true
+PASS 1 >= 1 is true
+PASS 1 > 0 is true
+PASS 0 >= 1 is false
+PASS 1 >= 2 is false
+PASS 1 > 1 is false
+PASS 1 > 2 is false
+PASS if (0 >= 0 || 0) true; else false is true
+PASS if (1 >= 0 || 0) true; else false is true
+PASS if (1 >= 1 || 0) true; else false is true
+PASS if (0 <  1 || 0) true; else false is true
+PASS if (0 >= 1 || 0) true; else false is false
+PASS if (1 >= 2 || 0) true; else false is false
+PASS if (1 <  1 || 0) true; else false is false
+PASS if (2 <  1 || 0) true; else false is false
+PASS 0.5 >= 0 is true
+PASS 1.5 >= 0 is true
+PASS 1.5 >= 1 is true
+PASS 1.5 > 0 is true
+PASS 0.5 >= 1 is false
+PASS 1.5 >= 2 is false
+PASS 1.5 > 1 is true
+PASS 1.5 > 2 is false
+PASS if (0.5 >= 0 || 0) true; else false is true
+PASS if (1.5 >= 0 || 0) true; else false is true
+PASS if (1.5 >= 1 || 0) true; else false is true
+PASS if (0 <  1.5 || 0) true; else false is true
+PASS if (0.5 >= 1 || 0) true; else false is false
+PASS if (1.5 >= 2 || 0) true; else false is false
+PASS if (1 <  1.5 || 0) true; else false is true
+PASS if (2 <  1.5 || 0) true; else false is false
+PASS zero >= zero is true
+PASS 1 >= zero is true
+PASS 1 >= 1 is true
+PASS 1 > zero is true
+PASS zero >= 1 is false
+PASS 1 >= 2 is false
+PASS 1 > 1 is false
+PASS 1 > 2 is false
+PASS if (zero >= zero || 0) true; else false is true
+PASS if (1 >= zero || zero) true; else false is true
+PASS if (1 >= 1 || zero) true; else false is true
+PASS if (zero <  1 || zero) true; else false is true
+PASS if (zero >= 1 || zero) true; else false is false
+PASS if (1 >= 2 || zero) true; else false is false
+PASS if (1 <  1 || zero) true; else false is false
+PASS if (2 <  1 || zero) true; else false is false
+PASS p5 >= 0 is true
+PASS p15 >= 0 is true
+PASS p15 >= 1 is true
+PASS p15 > 0 is true
+PASS p5 >= 1 is false
+PASS p15 >= 2 is false
+PASS p15 > 1 is true
+PASS p15 > 2 is false
+PASS if (p5 >= 0 || 0) true; else false is true
+PASS if (p15 >= 0 || 0) true; else false is true
+PASS if (p15 >= 1 || 0) true; else false is true
+PASS if (0 <  p15 || 0) true; else false is true
+PASS if (p5 >= 1 || 0) true; else false is false
+PASS if (p15 >= 2 || 0) true; else false is false
+PASS if (1 <  p15 || 0) true; else false is true
+PASS if (2 <  p15 || 0) true; else false is false
+PASS zero >= zero is true
+PASS one >= zero is true
+PASS one >= one is true
+PASS one > zero is true
+PASS zero >= one is false
+PASS one >= two is false
+PASS one > one is false
+PASS one > two is false
+PASS if (zero >= zero || 0) true; else false is true
+PASS if (one >= zero || zero) true; else false is true
+PASS if (one >= one || zero) true; else false is true
+PASS if (zero <  one || zero) true; else false is true
+PASS if (zero >= one || zero) true; else false is false
+PASS if (one >= two || zero) true; else false is false
+PASS if (one <  one || zero) true; else false is false
+PASS if (two <  one || zero) true; else false is false
+PASS p5 >= 0 is true
+PASS p15 >= 0 is true
+PASS p15 >= one is true
+PASS p15 > 0 is true
+PASS p5 >= one is false
+PASS p15 >= two is false
+PASS p15 > one is true
+PASS p15 > two is false
+PASS if (p5 >= 0 || 0) true; else false is true
+PASS if (p15 >= 0 || 0) true; else false is true
+PASS if (p15 >= one || 0) true; else false is true
+PASS if (0 <  p15 || 0) true; else false is true
+PASS if (p5 >= one || 0) true; else false is false
+PASS if (p15 >= two || 0) true; else false is false
+PASS if (one <  p15 || 0) true; else false is true
+PASS if (two <  p15 || 0) true; else false is false
+PASS  0 >    NaN is false
+PASS  NaN >  NaN is false
+PASS  0 >=   NaN is false
+PASS  NaN >= NaN is false
+PASS  0.5 >  NaN is false
+PASS  NaN >  NaN is false
+PASS  0.5 >= NaN is false
+PASS  NaN >= NaN is false
+PASS  zero > NaN is false
+PASS zero >= NaN is false
+PASS  NaN >= NaN is false
+PASS  p5  >  NaN is false
+PASS NaN  >  NaN is false
+PASS p5  >=  NaN is false
+PASS NaN  >= NaN is false
+PASS if ( 0 >    NaN) true; else false; is false
+PASS if ( NaN >  NaN) true; else false; is false
+PASS if ( 0 >=   NaN) true; else false; is false
+PASS if ( NaN >= NaN) true; else false; is false
+PASS if ( 0.5 >  NaN) true; else false; is false
+PASS if ( NaN >  NaN) true; else false; is false
+PASS if ( 0.5 >= NaN) true; else false; is false
+PASS if ( NaN >= NaN) true; else false; is false
+PASS if ( zero > NaN) true; else false; is false
+PASS if (zero >= NaN) true; else false; is false
+PASS if ( NaN >= NaN) true; else false; is false
+PASS if ( p5  >  NaN) true; else false; is false
+PASS if (NaN  >  NaN) true; else false; is false
+PASS if (p5  >=  NaN) true; else false; is false
+PASS if (NaN  >= NaN) true; else false; is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/comparison-operators-greater.js b/test/webkit/comparison-operators-greater.js
new file mode 100644 (file)
index 0000000..73e8832
--- /dev/null
@@ -0,0 +1,253 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("test that comparison operators work correctly.")
+
+function makeTest(start, end, expression, relationship, override, invert) {
+    var resultValue = eval(relationship + expression + 0) || !!override;
+    if (invert)
+        resultValue = !resultValue;
+    var expr = start + expression + end;
+    var result = [];
+    function func(content) { var f = new Function(content); f.toString = function(){ return content}; return f; }
+    result.push([new func("return " + expr + ";"), resultValue]);
+    result.push([new func("if (" + expr + ") return true; return false;"), resultValue]);
+    result.push([new func("var k = 0; while (" + expr + ") if (k++) return true; return false;"), resultValue]);
+    result.push([new func("var k = 0; for (; " + expr + "; ) if (k++) return true; return false;"), resultValue]);
+    return result;
+}
+function doTest(lhs, rhs, relationship) {
+    var expressionParts = [["(",")"],["(", ") || 1", true],["(", ") && 1"],["(", ") || 1", true],["1 || (",")", true],["1 && (",")"]];
+    var expressions = [];
+    var tests = [];
+    for (var i = 0; i < expressionParts.length; i++) {
+        var start = expressionParts[i][0] + lhs;
+        var end = String(rhs) + expressionParts[i][1];
+        tests.push.apply(tests, makeTest(start, end, ">", relationship, expressionParts[i][2]));
+        tests.push.apply(tests, makeTest(start, end, ">=", relationship, expressionParts[i][2]));
+    }
+    for (var i = 0; i < tests.length; i++) {
+        if ((r=tests[i][0]()) == tests[i][1])
+            testPassed(tests[i][0] + " is " + tests[i][1]);
+        else
+            testFailed(tests[i][0] + " is " + r + " and should be " + tests[i][1] + ".");
+    }
+}
+
+var letterA = "a";
+var letterB = "b";
+var letter0 = "0";
+
+var One = 1;
+var Zero = 0;
+doTest('"a"', '"b"', -1);
+doTest('"a"', '"a"', 0);
+doTest('"b"', '"a"', 1);
+doTest('letterA', '"b"', -1);
+doTest('letterA', '"a"', 0);
+doTest('"b"', '"a"', 1);
+doTest('letterA', '"b"', -1);
+doTest('letterA', 'letterA', 0);
+doTest('"b"', 'letterA', 1);
+doTest('"a"', '"b"', -1);
+doTest('"a"', 'letterA', 0);
+doTest('"b"', 'letterA', 1);
+
+doTest('"a"', '0', NaN);
+doTest('0', '"a"', NaN);
+
+doTest('0', '"0"', 0);
+doTest('Zero', 'letter0', 0);
+doTest('0', 'letter0', 0);
+doTest('Zero', '"0"', 0);
+doTest('-1', '"0"', -1);
+doTest('1', '"0"', 1);
+doTest('0', '"-1"', 1);
+doTest('0', '"1"', -1);
+
+doTest('letterA', '0', NaN);
+doTest('letterA', '"a"', 0);
+doTest('0', '"a"', NaN);
+doTest('letterA', 'letterA', 0);
+doTest('0', 'letterA', NaN);
+doTest('"a"', 'letterA', 0);
+doTest('0', 'letterA', NaN);
+
+
+doTest('0', '1', -1);
+doTest('0', '0', 0);
+doTest('1', '0', 1);
+doTest('Zero', '1', -1);
+doTest('Zero', '0', 0);
+doTest('1', 'Zero', 1);
+doTest('0', 'One', -1);
+doTest('One', '0', 1);
+
+shouldBeTrue("0 >= 0");
+shouldBeTrue("1 >= 0");
+shouldBeTrue("1 >= 1");
+shouldBeTrue("1 > 0");
+shouldBeFalse("0 >= 1");
+shouldBeFalse("1 >= 2");
+shouldBeFalse("1 > 1");
+shouldBeFalse("1 > 2");
+
+ shouldBeTrue("if (0 >= 0 || 0) true; else false");
+ shouldBeTrue("if (1 >= 0 || 0) true; else false");
+ shouldBeTrue("if (1 >= 1 || 0) true; else false");
+ shouldBeTrue("if (0 <  1 || 0) true; else false");
+shouldBeFalse("if (0 >= 1 || 0) true; else false");
+shouldBeFalse("if (1 >= 2 || 0) true; else false");
+shouldBeFalse("if (1 <  1 || 0) true; else false");
+shouldBeFalse("if (2 <  1 || 0) true; else false");
+
+shouldBeTrue("0.5 >= 0");
+shouldBeTrue("1.5 >= 0");
+shouldBeTrue("1.5 >= 1");
+shouldBeTrue("1.5 > 0");
+shouldBeFalse("0.5 >= 1");
+shouldBeFalse("1.5 >= 2");
+shouldBeTrue("1.5 > 1");
+shouldBeFalse("1.5 > 2");
+
+ shouldBeTrue("if (0.5 >= 0 || 0) true; else false");
+ shouldBeTrue("if (1.5 >= 0 || 0) true; else false");
+ shouldBeTrue("if (1.5 >= 1 || 0) true; else false");
+ shouldBeTrue("if (0 <  1.5 || 0) true; else false");
+shouldBeFalse("if (0.5 >= 1 || 0) true; else false");
+shouldBeFalse("if (1.5 >= 2 || 0) true; else false");
+ shouldBeTrue("if (1 <  1.5 || 0) true; else false");
+shouldBeFalse("if (2 <  1.5 || 0) true; else false");
+
+var zero = 0;
+var one = 1;
+var two = 2;
+var p5 = 0.5;
+var p15 = 1.5;
+
+
+shouldBeTrue("zero >= zero");
+shouldBeTrue("1 >= zero");
+shouldBeTrue("1 >= 1");
+shouldBeTrue("1 > zero");
+shouldBeFalse("zero >= 1");
+shouldBeFalse("1 >= 2");
+shouldBeFalse("1 > 1");
+shouldBeFalse("1 > 2");
+
+ shouldBeTrue("if (zero >= zero || 0) true; else false");
+ shouldBeTrue("if (1 >= zero || zero) true; else false");
+ shouldBeTrue("if (1 >= 1 || zero) true; else false");
+ shouldBeTrue("if (zero <  1 || zero) true; else false");
+shouldBeFalse("if (zero >= 1 || zero) true; else false");
+shouldBeFalse("if (1 >= 2 || zero) true; else false");
+shouldBeFalse("if (1 <  1 || zero) true; else false");
+shouldBeFalse("if (2 <  1 || zero) true; else false");
+
+shouldBeTrue("p5 >= 0");
+shouldBeTrue("p15 >= 0");
+shouldBeTrue("p15 >= 1");
+shouldBeTrue("p15 > 0");
+shouldBeFalse("p5 >= 1");
+shouldBeFalse("p15 >= 2");
+shouldBeTrue("p15 > 1");
+shouldBeFalse("p15 > 2");
+
+ shouldBeTrue("if (p5 >= 0 || 0) true; else false");
+ shouldBeTrue("if (p15 >= 0 || 0) true; else false");
+ shouldBeTrue("if (p15 >= 1 || 0) true; else false");
+ shouldBeTrue("if (0 <  p15 || 0) true; else false");
+shouldBeFalse("if (p5 >= 1 || 0) true; else false");
+shouldBeFalse("if (p15 >= 2 || 0) true; else false");
+ shouldBeTrue("if (1 <  p15 || 0) true; else false");
+shouldBeFalse("if (2 <  p15 || 0) true; else false");
+
+
+shouldBeTrue("zero >= zero");
+shouldBeTrue("one >= zero");
+shouldBeTrue("one >= one");
+shouldBeTrue("one > zero");
+shouldBeFalse("zero >= one");
+shouldBeFalse("one >= two");
+shouldBeFalse("one > one");
+shouldBeFalse("one > two");
+
+ shouldBeTrue("if (zero >= zero || 0) true; else false");
+ shouldBeTrue("if (one >= zero || zero) true; else false");
+ shouldBeTrue("if (one >= one || zero) true; else false");
+ shouldBeTrue("if (zero <  one || zero) true; else false");
+shouldBeFalse("if (zero >= one || zero) true; else false");
+shouldBeFalse("if (one >= two || zero) true; else false");
+shouldBeFalse("if (one <  one || zero) true; else false");
+shouldBeFalse("if (two <  one || zero) true; else false");
+
+shouldBeTrue("p5 >= 0");
+shouldBeTrue("p15 >= 0");
+shouldBeTrue("p15 >= one");
+shouldBeTrue("p15 > 0");
+shouldBeFalse("p5 >= one");
+shouldBeFalse("p15 >= two");
+shouldBeTrue("p15 > one");
+shouldBeFalse("p15 > two");
+
+ shouldBeTrue("if (p5 >= 0 || 0) true; else false");
+ shouldBeTrue("if (p15 >= 0 || 0) true; else false");
+ shouldBeTrue("if (p15 >= one || 0) true; else false");
+ shouldBeTrue("if (0 <  p15 || 0) true; else false");
+shouldBeFalse("if (p5 >= one || 0) true; else false");
+shouldBeFalse("if (p15 >= two || 0) true; else false");
+ shouldBeTrue("if (one <  p15 || 0) true; else false");
+shouldBeFalse("if (two <  p15 || 0) true; else false");
+
+shouldBeFalse(" 0 >    NaN");
+shouldBeFalse(" NaN >  NaN");
+shouldBeFalse(" 0 >=   NaN");
+shouldBeFalse(" NaN >= NaN");
+shouldBeFalse(" 0.5 >  NaN");
+shouldBeFalse(" NaN >  NaN");
+shouldBeFalse(" 0.5 >= NaN");
+shouldBeFalse(" NaN >= NaN");
+shouldBeFalse(" zero > NaN");
+shouldBeFalse("zero >= NaN");
+shouldBeFalse(" NaN >= NaN");
+shouldBeFalse(" p5  >  NaN");
+shouldBeFalse("NaN  >  NaN");
+shouldBeFalse("p5  >=  NaN");
+shouldBeFalse("NaN  >= NaN");
+
+
+shouldBeFalse("if ( 0 >    NaN) true; else false;");
+shouldBeFalse("if ( NaN >  NaN) true; else false;");
+shouldBeFalse("if ( 0 >=   NaN) true; else false;");
+shouldBeFalse("if ( NaN >= NaN) true; else false;");
+shouldBeFalse("if ( 0.5 >  NaN) true; else false;");
+shouldBeFalse("if ( NaN >  NaN) true; else false;");
+shouldBeFalse("if ( 0.5 >= NaN) true; else false;");
+shouldBeFalse("if ( NaN >= NaN) true; else false;");
+shouldBeFalse("if ( zero > NaN) true; else false;");
+shouldBeFalse("if (zero >= NaN) true; else false;");
+shouldBeFalse("if ( NaN >= NaN) true; else false;");
+shouldBeFalse("if ( p5  >  NaN) true; else false;");
+shouldBeFalse("if (NaN  >  NaN) true; else false;");
+shouldBeFalse("if (p5  >=  NaN) true; else false;");
+shouldBeFalse("if (NaN  >= NaN) true; else false;");
diff --git a/test/webkit/comparison-operators-less-expected.txt b/test/webkit/comparison-operators-less-expected.txt
new file mode 100644 (file)
index 0000000..0527993
--- /dev/null
@@ -0,0 +1,1934 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+test that comparison operators work correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS return ("a"<"b"); is true
+PASS if (("a"<"b")) return true; return false; is true
+PASS var k = 0; while (("a"<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"b"); ) if (k++) return true; return false; is true
+PASS return ("a"<="b"); is true
+PASS if (("a"<="b")) return true; return false; is true
+PASS var k = 0; while (("a"<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="b"); ) if (k++) return true; return false; is true
+PASS return ("a"<"b") || 1; is true
+PASS if (("a"<"b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<="b") || 1; is true
+PASS if (("a"<="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<"b") && 1; is true
+PASS if (("a"<"b") && 1) return true; return false; is true
+PASS var k = 0; while (("a"<"b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"b") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"<="b") && 1; is true
+PASS if (("a"<="b") && 1) return true; return false; is true
+PASS var k = 0; while (("a"<="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="b") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"<"b") || 1; is true
+PASS if (("a"<"b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<="b") || 1; is true
+PASS if (("a"<="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<"b"); is true
+PASS if (1 || ("a"<"b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<"b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<="b"); is true
+PASS if (1 || ("a"<="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<="b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"<"b"); is true
+PASS if (1 && ("a"<"b")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"<"b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"<="b"); is true
+PASS if (1 && ("a"<="b")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"<="b"); ) if (k++) return true; return false; is true
+PASS return ("a"<"a"); is false
+PASS if (("a"<"a")) return true; return false; is false
+PASS var k = 0; while (("a"<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<"a"); ) if (k++) return true; return false; is false
+PASS return ("a"<="a"); is true
+PASS if (("a"<="a")) return true; return false; is true
+PASS var k = 0; while (("a"<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="a"); ) if (k++) return true; return false; is true
+PASS return ("a"<"a") || 1; is true
+PASS if (("a"<"a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<="a") || 1; is true
+PASS if (("a"<="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<"a") && 1; is false
+PASS if (("a"<"a") && 1) return true; return false; is false
+PASS var k = 0; while (("a"<"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<"a") && 1; ) if (k++) return true; return false; is false
+PASS return ("a"<="a") && 1; is true
+PASS if (("a"<="a") && 1) return true; return false; is true
+PASS var k = 0; while (("a"<="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="a") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"<"a") || 1; is true
+PASS if (("a"<"a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<="a") || 1; is true
+PASS if (("a"<="a") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<"a"); is true
+PASS if (1 || ("a"<"a")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<"a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<="a"); is true
+PASS if (1 || ("a"<="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"<"a"); is false
+PASS if (1 && ("a"<"a")) return true; return false; is false
+PASS var k = 0; while (1 && ("a"<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"<"a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"<="a"); is true
+PASS if (1 && ("a"<="a")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"<="a"); ) if (k++) return true; return false; is true
+PASS return ("b"<"a"); is false
+PASS if (("b"<"a")) return true; return false; is false
+PASS var k = 0; while (("b"<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<"a"); ) if (k++) return true; return false; is false
+PASS return ("b"<="a"); is false
+PASS if (("b"<="a")) return true; return false; is false
+PASS var k = 0; while (("b"<="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<="a"); ) if (k++) return true; return false; is false
+PASS return ("b"<"a") || 1; is true
+PASS if (("b"<"a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<="a") || 1; is true
+PASS if (("b"<="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<"a") && 1; is false
+PASS if (("b"<"a") && 1) return true; return false; is false
+PASS var k = 0; while (("b"<"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<"a") && 1; ) if (k++) return true; return false; is false
+PASS return ("b"<="a") && 1; is false
+PASS if (("b"<="a") && 1) return true; return false; is false
+PASS var k = 0; while (("b"<="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<="a") && 1; ) if (k++) return true; return false; is false
+PASS return ("b"<"a") || 1; is true
+PASS if (("b"<"a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<="a") || 1; is true
+PASS if (("b"<="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b"<"a"); is true
+PASS if (1 || ("b"<"a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"<"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"<"a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"<="a"); is true
+PASS if (1 || ("b"<="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"<="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"<"a"); is false
+PASS if (1 && ("b"<"a")) return true; return false; is false
+PASS var k = 0; while (1 && ("b"<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"<"a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"<="a"); is false
+PASS if (1 && ("b"<="a")) return true; return false; is false
+PASS var k = 0; while (1 && ("b"<="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"<="a"); ) if (k++) return true; return false; is false
+PASS return (letterA<"b"); is true
+PASS if ((letterA<"b")) return true; return false; is true
+PASS var k = 0; while ((letterA<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"b"); ) if (k++) return true; return false; is true
+PASS return (letterA<="b"); is true
+PASS if ((letterA<="b")) return true; return false; is true
+PASS var k = 0; while ((letterA<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="b"); ) if (k++) return true; return false; is true
+PASS return (letterA<"b") || 1; is true
+PASS if ((letterA<"b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="b") || 1; is true
+PASS if ((letterA<="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<"b") && 1; is true
+PASS if ((letterA<"b") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"b") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="b") && 1; is true
+PASS if ((letterA<="b") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="b") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA<"b") || 1; is true
+PASS if ((letterA<"b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="b") || 1; is true
+PASS if ((letterA<="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<"b"); is true
+PASS if (1 || (letterA<"b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<"b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<="b"); is true
+PASS if (1 || (letterA<="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<="b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<"b"); is true
+PASS if (1 && (letterA<"b")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA<"b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<="b"); is true
+PASS if (1 && (letterA<="b")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA<="b"); ) if (k++) return true; return false; is true
+PASS return (letterA<"a"); is false
+PASS if ((letterA<"a")) return true; return false; is false
+PASS var k = 0; while ((letterA<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<"a"); ) if (k++) return true; return false; is false
+PASS return (letterA<="a"); is true
+PASS if ((letterA<="a")) return true; return false; is true
+PASS var k = 0; while ((letterA<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="a"); ) if (k++) return true; return false; is true
+PASS return (letterA<"a") || 1; is true
+PASS if ((letterA<"a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="a") || 1; is true
+PASS if ((letterA<="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<"a") && 1; is false
+PASS if ((letterA<"a") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA<"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<"a") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA<="a") && 1; is true
+PASS if ((letterA<="a") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="a") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA<"a") || 1; is true
+PASS if ((letterA<"a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="a") || 1; is true
+PASS if ((letterA<="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<"a"); is true
+PASS if (1 || (letterA<"a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<"a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<="a"); is true
+PASS if (1 || (letterA<="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<"a"); is false
+PASS if (1 && (letterA<"a")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA<"a"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA<="a"); is true
+PASS if (1 && (letterA<="a")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA<="a"); ) if (k++) return true; return false; is true
+PASS return ("b"<"a"); is false
+PASS if (("b"<"a")) return true; return false; is false
+PASS var k = 0; while (("b"<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<"a"); ) if (k++) return true; return false; is false
+PASS return ("b"<="a"); is false
+PASS if (("b"<="a")) return true; return false; is false
+PASS var k = 0; while (("b"<="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<="a"); ) if (k++) return true; return false; is false
+PASS return ("b"<"a") || 1; is true
+PASS if (("b"<"a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<="a") || 1; is true
+PASS if (("b"<="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<="a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<"a") && 1; is false
+PASS if (("b"<"a") && 1) return true; return false; is false
+PASS var k = 0; while (("b"<"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<"a") && 1; ) if (k++) return true; return false; is false
+PASS return ("b"<="a") && 1; is false
+PASS if (("b"<="a") && 1) return true; return false; is false
+PASS var k = 0; while (("b"<="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<="a") && 1; ) if (k++) return true; return false; is false
+PASS return ("b"<"a") || 1; is true
+PASS if (("b"<"a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<"a") || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<="a") || 1; is true
+PASS if (("b"<="a") || 1) return true; return false; is true
+PASS var k = 0; while (("b"<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b"<"a"); is true
+PASS if (1 || ("b"<"a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"<"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"<"a"); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"<="a"); is true
+PASS if (1 || ("b"<="a")) return true; return false; is true
+PASS var k = 0; while (1 || ("b"<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"<="a"); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"<"a"); is false
+PASS if (1 && ("b"<"a")) return true; return false; is false
+PASS var k = 0; while (1 && ("b"<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"<"a"); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"<="a"); is false
+PASS if (1 && ("b"<="a")) return true; return false; is false
+PASS var k = 0; while (1 && ("b"<="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"<="a"); ) if (k++) return true; return false; is false
+PASS return (letterA<"b"); is true
+PASS if ((letterA<"b")) return true; return false; is true
+PASS var k = 0; while ((letterA<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"b"); ) if (k++) return true; return false; is true
+PASS return (letterA<="b"); is true
+PASS if ((letterA<="b")) return true; return false; is true
+PASS var k = 0; while ((letterA<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="b"); ) if (k++) return true; return false; is true
+PASS return (letterA<"b") || 1; is true
+PASS if ((letterA<"b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="b") || 1; is true
+PASS if ((letterA<="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<"b") && 1; is true
+PASS if ((letterA<"b") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"b") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="b") && 1; is true
+PASS if ((letterA<="b") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="b") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA<"b") || 1; is true
+PASS if ((letterA<"b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"b") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="b") || 1; is true
+PASS if ((letterA<="b") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<"b"); is true
+PASS if (1 || (letterA<"b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<"b"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<="b"); is true
+PASS if (1 || (letterA<="b")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<="b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<"b"); is true
+PASS if (1 && (letterA<"b")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA<"b"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<="b"); is true
+PASS if (1 && (letterA<="b")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA<="b"); ) if (k++) return true; return false; is true
+PASS return (letterA<letterA); is false
+PASS if ((letterA<letterA)) return true; return false; is false
+PASS var k = 0; while ((letterA<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<letterA); ) if (k++) return true; return false; is false
+PASS return (letterA<=letterA); is true
+PASS if ((letterA<=letterA)) return true; return false; is true
+PASS var k = 0; while ((letterA<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=letterA); ) if (k++) return true; return false; is true
+PASS return (letterA<letterA) || 1; is true
+PASS if ((letterA<letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<=letterA) || 1; is true
+PASS if ((letterA<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<letterA) && 1; is false
+PASS if ((letterA<letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA<letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA<=letterA) && 1; is true
+PASS if ((letterA<=letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA<=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA<letterA) || 1; is true
+PASS if ((letterA<letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<=letterA) || 1; is true
+PASS if ((letterA<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<letterA); is true
+PASS if (1 || (letterA<letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<=letterA); is true
+PASS if (1 || (letterA<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<letterA); is false
+PASS if (1 && (letterA<letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA<letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA<=letterA); is true
+PASS if (1 && (letterA<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA<=letterA); ) if (k++) return true; return false; is true
+PASS return ("b"<letterA); is false
+PASS if (("b"<letterA)) return true; return false; is false
+PASS var k = 0; while (("b"<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<letterA); ) if (k++) return true; return false; is false
+PASS return ("b"<=letterA); is false
+PASS if (("b"<=letterA)) return true; return false; is false
+PASS var k = 0; while (("b"<=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<=letterA); ) if (k++) return true; return false; is false
+PASS return ("b"<letterA) || 1; is true
+PASS if (("b"<letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<=letterA) || 1; is true
+PASS if (("b"<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<letterA) && 1; is false
+PASS if (("b"<letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("b"<letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("b"<=letterA) && 1; is false
+PASS if (("b"<=letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("b"<=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("b"<letterA) || 1; is true
+PASS if (("b"<letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<=letterA) || 1; is true
+PASS if (("b"<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b"<letterA); is true
+PASS if (1 || ("b"<letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"<letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"<letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"<=letterA); is true
+PASS if (1 || ("b"<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"<=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"<letterA); is false
+PASS if (1 && ("b"<letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("b"<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"<letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"<=letterA); is false
+PASS if (1 && ("b"<=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("b"<=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"<=letterA); ) if (k++) return true; return false; is false
+PASS return ("a"<"b"); is true
+PASS if (("a"<"b")) return true; return false; is true
+PASS var k = 0; while (("a"<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"b"); ) if (k++) return true; return false; is true
+PASS return ("a"<="b"); is true
+PASS if (("a"<="b")) return true; return false; is true
+PASS var k = 0; while (("a"<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="b"); ) if (k++) return true; return false; is true
+PASS return ("a"<"b") || 1; is true
+PASS if (("a"<"b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<="b") || 1; is true
+PASS if (("a"<="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<"b") && 1; is true
+PASS if (("a"<"b") && 1) return true; return false; is true
+PASS var k = 0; while (("a"<"b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"b") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"<="b") && 1; is true
+PASS if (("a"<="b") && 1) return true; return false; is true
+PASS var k = 0; while (("a"<="b") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="b") && 1; ) if (k++) return true; return false; is true
+PASS return ("a"<"b") || 1; is true
+PASS if (("a"<"b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<"b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<"b") || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<="b") || 1; is true
+PASS if (("a"<="b") || 1) return true; return false; is true
+PASS var k = 0; while (("a"<="b") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<="b") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<"b"); is true
+PASS if (1 || ("a"<"b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<"b"); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<="b"); is true
+PASS if (1 || ("a"<="b")) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<="b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"<"b"); is true
+PASS if (1 && ("a"<"b")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"<"b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"<"b"); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"<="b"); is true
+PASS if (1 && ("a"<="b")) return true; return false; is true
+PASS var k = 0; while (1 && ("a"<="b")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"<="b"); ) if (k++) return true; return false; is true
+PASS return ("a"<letterA); is false
+PASS if (("a"<letterA)) return true; return false; is false
+PASS var k = 0; while (("a"<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<letterA); ) if (k++) return true; return false; is false
+PASS return ("a"<=letterA); is true
+PASS if (("a"<=letterA)) return true; return false; is true
+PASS var k = 0; while (("a"<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=letterA); ) if (k++) return true; return false; is true
+PASS return ("a"<letterA) || 1; is true
+PASS if (("a"<letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<=letterA) || 1; is true
+PASS if (("a"<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<letterA) && 1; is false
+PASS if (("a"<letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("a"<letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"<=letterA) && 1; is true
+PASS if (("a"<=letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("a"<=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("a"<letterA) || 1; is true
+PASS if (("a"<letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<=letterA) || 1; is true
+PASS if (("a"<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<letterA); is true
+PASS if (1 || ("a"<letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<=letterA); is true
+PASS if (1 || ("a"<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"<letterA); is false
+PASS if (1 && ("a"<letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"<letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"<=letterA); is true
+PASS if (1 && ("a"<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("a"<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"<=letterA); ) if (k++) return true; return false; is true
+PASS return ("b"<letterA); is false
+PASS if (("b"<letterA)) return true; return false; is false
+PASS var k = 0; while (("b"<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<letterA); ) if (k++) return true; return false; is false
+PASS return ("b"<=letterA); is false
+PASS if (("b"<=letterA)) return true; return false; is false
+PASS var k = 0; while (("b"<=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<=letterA); ) if (k++) return true; return false; is false
+PASS return ("b"<letterA) || 1; is true
+PASS if (("b"<letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<=letterA) || 1; is true
+PASS if (("b"<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<letterA) && 1; is false
+PASS if (("b"<letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("b"<letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("b"<=letterA) && 1; is false
+PASS if (("b"<=letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("b"<=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("b"<=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("b"<letterA) || 1; is true
+PASS if (("b"<letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("b"<=letterA) || 1; is true
+PASS if (("b"<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("b"<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("b"<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("b"<letterA); is true
+PASS if (1 || ("b"<letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"<letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"<letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("b"<=letterA); is true
+PASS if (1 || ("b"<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("b"<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("b"<=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("b"<letterA); is false
+PASS if (1 && ("b"<letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("b"<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"<letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("b"<=letterA); is false
+PASS if (1 && ("b"<=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("b"<=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("b"<=letterA); ) if (k++) return true; return false; is false
+PASS return ("a"<0); is false
+PASS if (("a"<0)) return true; return false; is false
+PASS var k = 0; while (("a"<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<0); ) if (k++) return true; return false; is false
+PASS return ("a"<=0); is false
+PASS if (("a"<=0)) return true; return false; is false
+PASS var k = 0; while (("a"<=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<=0); ) if (k++) return true; return false; is false
+PASS return ("a"<0) || 1; is true
+PASS if (("a"<0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<=0) || 1; is true
+PASS if (("a"<=0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<0) && 1; is false
+PASS if (("a"<0) && 1) return true; return false; is false
+PASS var k = 0; while (("a"<0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<0) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"<=0) && 1; is false
+PASS if (("a"<=0) && 1) return true; return false; is false
+PASS var k = 0; while (("a"<=0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<=0) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"<0) || 1; is true
+PASS if (("a"<0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<0) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<=0) || 1; is true
+PASS if (("a"<=0) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<0); is true
+PASS if (1 || ("a"<0)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<0); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<=0); is true
+PASS if (1 || ("a"<=0)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<=0); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"<0); is false
+PASS if (1 && ("a"<0)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"<0); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"<=0); is false
+PASS if (1 && ("a"<=0)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"<=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"<=0); ) if (k++) return true; return false; is false
+PASS return (0<"a"); is false
+PASS if ((0<"a")) return true; return false; is false
+PASS var k = 0; while ((0<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<"a"); ) if (k++) return true; return false; is false
+PASS return (0<="a"); is false
+PASS if ((0<="a")) return true; return false; is false
+PASS var k = 0; while ((0<="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<="a"); ) if (k++) return true; return false; is false
+PASS return (0<"a") || 1; is true
+PASS if ((0<"a") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"a") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="a") || 1; is true
+PASS if ((0<="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0<"a") && 1; is false
+PASS if ((0<"a") && 1) return true; return false; is false
+PASS var k = 0; while ((0<"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<"a") && 1; ) if (k++) return true; return false; is false
+PASS return (0<="a") && 1; is false
+PASS if ((0<="a") && 1) return true; return false; is false
+PASS var k = 0; while ((0<="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<="a") && 1; ) if (k++) return true; return false; is false
+PASS return (0<"a") || 1; is true
+PASS if ((0<"a") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"a") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="a") || 1; is true
+PASS if ((0<="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<"a"); is true
+PASS if (1 || (0<"a")) return true; return false; is true
+PASS var k = 0; while (1 || (0<"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<"a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0<="a"); is true
+PASS if (1 || (0<="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (0<"a"); is false
+PASS if (1 && (0<"a")) return true; return false; is false
+PASS var k = 0; while (1 && (0<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<"a"); ) if (k++) return true; return false; is false
+PASS return 1 && (0<="a"); is false
+PASS if (1 && (0<="a")) return true; return false; is false
+PASS var k = 0; while (1 && (0<="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<="a"); ) if (k++) return true; return false; is false
+PASS return (letterA<0); is false
+PASS if ((letterA<0)) return true; return false; is false
+PASS var k = 0; while ((letterA<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<0); ) if (k++) return true; return false; is false
+PASS return (letterA<=0); is false
+PASS if ((letterA<=0)) return true; return false; is false
+PASS var k = 0; while ((letterA<=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<=0); ) if (k++) return true; return false; is false
+PASS return (letterA<0) || 1; is true
+PASS if ((letterA<0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<=0) || 1; is true
+PASS if ((letterA<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<0) && 1; is false
+PASS if ((letterA<0) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA<0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<0) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA<=0) && 1; is false
+PASS if ((letterA<=0) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA<=0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<=0) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA<0) || 1; is true
+PASS if ((letterA<0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<0) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<=0) || 1; is true
+PASS if ((letterA<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<0); is true
+PASS if (1 || (letterA<0)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<0); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<=0); is true
+PASS if (1 || (letterA<=0)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<=0); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<0); is false
+PASS if (1 && (letterA<0)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA<0); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA<=0); is false
+PASS if (1 && (letterA<=0)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA<=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA<=0); ) if (k++) return true; return false; is false
+PASS return (letterA<"a"); is false
+PASS if ((letterA<"a")) return true; return false; is false
+PASS var k = 0; while ((letterA<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<"a"); ) if (k++) return true; return false; is false
+PASS return (letterA<="a"); is true
+PASS if ((letterA<="a")) return true; return false; is true
+PASS var k = 0; while ((letterA<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="a"); ) if (k++) return true; return false; is true
+PASS return (letterA<"a") || 1; is true
+PASS if ((letterA<"a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="a") || 1; is true
+PASS if ((letterA<="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<"a") && 1; is false
+PASS if ((letterA<"a") && 1) return true; return false; is false
+PASS var k = 0; while ((letterA<"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<"a") && 1; ) if (k++) return true; return false; is false
+PASS return (letterA<="a") && 1; is true
+PASS if ((letterA<="a") && 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="a") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="a") && 1; ) if (k++) return true; return false; is true
+PASS return (letterA<"a") || 1; is true
+PASS if ((letterA<"a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<"a") || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<="a") || 1; is true
+PASS if ((letterA<="a") || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<"a"); is true
+PASS if (1 || (letterA<"a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<"a"); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<="a"); is true
+PASS if (1 || (letterA<="a")) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<"a"); is false
+PASS if (1 && (letterA<"a")) return true; return false; is false
+PASS var k = 0; while (1 && (letterA<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA<"a"); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA<="a"); is true
+PASS if (1 && (letterA<="a")) return true; return false; is true
+PASS var k = 0; while (1 && (letterA<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA<="a"); ) if (k++) return true; return false; is true
+PASS return (0<"a"); is false
+PASS if ((0<"a")) return true; return false; is false
+PASS var k = 0; while ((0<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<"a"); ) if (k++) return true; return false; is false
+PASS return (0<="a"); is false
+PASS if ((0<="a")) return true; return false; is false
+PASS var k = 0; while ((0<="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<="a"); ) if (k++) return true; return false; is false
+PASS return (0<"a") || 1; is true
+PASS if ((0<"a") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"a") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="a") || 1; is true
+PASS if ((0<="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="a") || 1; ) if (k++) return true; return false; is true
+PASS return (0<"a") && 1; is false
+PASS if ((0<"a") && 1) return true; return false; is false
+PASS var k = 0; while ((0<"a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<"a") && 1; ) if (k++) return true; return false; is false
+PASS return (0<="a") && 1; is false
+PASS if ((0<="a") && 1) return true; return false; is false
+PASS var k = 0; while ((0<="a") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<="a") && 1; ) if (k++) return true; return false; is false
+PASS return (0<"a") || 1; is true
+PASS if ((0<"a") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"a") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="a") || 1; is true
+PASS if ((0<="a") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="a") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="a") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<"a"); is true
+PASS if (1 || (0<"a")) return true; return false; is true
+PASS var k = 0; while (1 || (0<"a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<"a"); ) if (k++) return true; return false; is true
+PASS return 1 || (0<="a"); is true
+PASS if (1 || (0<="a")) return true; return false; is true
+PASS var k = 0; while (1 || (0<="a")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<="a"); ) if (k++) return true; return false; is true
+PASS return 1 && (0<"a"); is false
+PASS if (1 && (0<"a")) return true; return false; is false
+PASS var k = 0; while (1 && (0<"a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<"a"); ) if (k++) return true; return false; is false
+PASS return 1 && (0<="a"); is false
+PASS if (1 && (0<="a")) return true; return false; is false
+PASS var k = 0; while (1 && (0<="a")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<="a"); ) if (k++) return true; return false; is false
+PASS return (letterA<letterA); is false
+PASS if ((letterA<letterA)) return true; return false; is false
+PASS var k = 0; while ((letterA<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<letterA); ) if (k++) return true; return false; is false
+PASS return (letterA<=letterA); is true
+PASS if ((letterA<=letterA)) return true; return false; is true
+PASS var k = 0; while ((letterA<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=letterA); ) if (k++) return true; return false; is true
+PASS return (letterA<letterA) || 1; is true
+PASS if ((letterA<letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<=letterA) || 1; is true
+PASS if ((letterA<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<letterA) && 1; is false
+PASS if ((letterA<letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((letterA<letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (letterA<letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (letterA<=letterA) && 1; is true
+PASS if ((letterA<=letterA) && 1) return true; return false; is true
+PASS var k = 0; while ((letterA<=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return (letterA<letterA) || 1; is true
+PASS if ((letterA<letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (letterA<=letterA) || 1; is true
+PASS if ((letterA<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((letterA<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (letterA<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<letterA); is true
+PASS if (1 || (letterA<letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (letterA<=letterA); is true
+PASS if (1 || (letterA<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (letterA<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (letterA<=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (letterA<letterA); is false
+PASS if (1 && (letterA<letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (letterA<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (letterA<letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (letterA<=letterA); is true
+PASS if (1 && (letterA<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && (letterA<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (letterA<=letterA); ) if (k++) return true; return false; is true
+PASS return (0<letterA); is false
+PASS if ((0<letterA)) return true; return false; is false
+PASS var k = 0; while ((0<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<letterA); ) if (k++) return true; return false; is false
+PASS return (0<=letterA); is false
+PASS if ((0<=letterA)) return true; return false; is false
+PASS var k = 0; while ((0<=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<=letterA); ) if (k++) return true; return false; is false
+PASS return (0<letterA) || 1; is true
+PASS if ((0<letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=letterA) || 1; is true
+PASS if ((0<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0<letterA) && 1; is false
+PASS if ((0<letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0<letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0<=letterA) && 1; is false
+PASS if ((0<=letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0<=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0<letterA) || 1; is true
+PASS if ((0<letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=letterA) || 1; is true
+PASS if ((0<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<letterA); is true
+PASS if (1 || (0<letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0<letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0<=letterA); is true
+PASS if (1 || (0<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (0<letterA); is false
+PASS if (1 && (0<letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (0<=letterA); is false
+PASS if (1 && (0<=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0<=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<=letterA); ) if (k++) return true; return false; is false
+PASS return ("a"<letterA); is false
+PASS if (("a"<letterA)) return true; return false; is false
+PASS var k = 0; while (("a"<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<letterA); ) if (k++) return true; return false; is false
+PASS return ("a"<=letterA); is true
+PASS if (("a"<=letterA)) return true; return false; is true
+PASS var k = 0; while (("a"<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=letterA); ) if (k++) return true; return false; is true
+PASS return ("a"<letterA) || 1; is true
+PASS if (("a"<letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<=letterA) || 1; is true
+PASS if (("a"<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<letterA) && 1; is false
+PASS if (("a"<letterA) && 1) return true; return false; is false
+PASS var k = 0; while (("a"<letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; ("a"<letterA) && 1; ) if (k++) return true; return false; is false
+PASS return ("a"<=letterA) && 1; is true
+PASS if (("a"<=letterA) && 1) return true; return false; is true
+PASS var k = 0; while (("a"<=letterA) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=letterA) && 1; ) if (k++) return true; return false; is true
+PASS return ("a"<letterA) || 1; is true
+PASS if (("a"<letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return ("a"<=letterA) || 1; is true
+PASS if (("a"<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while (("a"<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; ("a"<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<letterA); is true
+PASS if (1 || ("a"<letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<letterA); ) if (k++) return true; return false; is true
+PASS return 1 || ("a"<=letterA); is true
+PASS if (1 || ("a"<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || ("a"<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || ("a"<=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && ("a"<letterA); is false
+PASS if (1 && ("a"<letterA)) return true; return false; is false
+PASS var k = 0; while (1 && ("a"<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && ("a"<letterA); ) if (k++) return true; return false; is false
+PASS return 1 && ("a"<=letterA); is true
+PASS if (1 && ("a"<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 && ("a"<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && ("a"<=letterA); ) if (k++) return true; return false; is true
+PASS return (0<letterA); is false
+PASS if ((0<letterA)) return true; return false; is false
+PASS var k = 0; while ((0<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<letterA); ) if (k++) return true; return false; is false
+PASS return (0<=letterA); is false
+PASS if ((0<=letterA)) return true; return false; is false
+PASS var k = 0; while ((0<=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<=letterA); ) if (k++) return true; return false; is false
+PASS return (0<letterA) || 1; is true
+PASS if ((0<letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=letterA) || 1; is true
+PASS if ((0<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0<letterA) && 1; is false
+PASS if ((0<letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0<letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0<=letterA) && 1; is false
+PASS if ((0<=letterA) && 1) return true; return false; is false
+PASS var k = 0; while ((0<=letterA) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<=letterA) && 1; ) if (k++) return true; return false; is false
+PASS return (0<letterA) || 1; is true
+PASS if ((0<letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0<letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<letterA) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=letterA) || 1; is true
+PASS if ((0<=letterA) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=letterA) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=letterA) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<letterA); is true
+PASS if (1 || (0<letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0<letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<letterA); ) if (k++) return true; return false; is true
+PASS return 1 || (0<=letterA); is true
+PASS if (1 || (0<=letterA)) return true; return false; is true
+PASS var k = 0; while (1 || (0<=letterA)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<=letterA); ) if (k++) return true; return false; is true
+PASS return 1 && (0<letterA); is false
+PASS if (1 && (0<letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0<letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<letterA); ) if (k++) return true; return false; is false
+PASS return 1 && (0<=letterA); is false
+PASS if (1 && (0<=letterA)) return true; return false; is false
+PASS var k = 0; while (1 && (0<=letterA)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<=letterA); ) if (k++) return true; return false; is false
+PASS return (0<"0"); is false
+PASS if ((0<"0")) return true; return false; is false
+PASS var k = 0; while ((0<"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<"0"); ) if (k++) return true; return false; is false
+PASS return (0<="0"); is true
+PASS if ((0<="0")) return true; return false; is true
+PASS var k = 0; while ((0<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="0"); ) if (k++) return true; return false; is true
+PASS return (0<"0") || 1; is true
+PASS if ((0<"0") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"0") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="0") || 1; is true
+PASS if ((0<="0") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="0") || 1; ) if (k++) return true; return false; is true
+PASS return (0<"0") && 1; is false
+PASS if ((0<"0") && 1) return true; return false; is false
+PASS var k = 0; while ((0<"0") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<"0") && 1; ) if (k++) return true; return false; is false
+PASS return (0<="0") && 1; is true
+PASS if ((0<="0") && 1) return true; return false; is true
+PASS var k = 0; while ((0<="0") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="0") && 1; ) if (k++) return true; return false; is true
+PASS return (0<"0") || 1; is true
+PASS if ((0<"0") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"0") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="0") || 1; is true
+PASS if ((0<="0") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="0") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<"0"); is true
+PASS if (1 || (0<"0")) return true; return false; is true
+PASS var k = 0; while (1 || (0<"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<"0"); ) if (k++) return true; return false; is true
+PASS return 1 || (0<="0"); is true
+PASS if (1 || (0<="0")) return true; return false; is true
+PASS var k = 0; while (1 || (0<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<="0"); ) if (k++) return true; return false; is true
+PASS return 1 && (0<"0"); is false
+PASS if (1 && (0<"0")) return true; return false; is false
+PASS var k = 0; while (1 && (0<"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<"0"); ) if (k++) return true; return false; is false
+PASS return 1 && (0<="0"); is true
+PASS if (1 && (0<="0")) return true; return false; is true
+PASS var k = 0; while (1 && (0<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<="0"); ) if (k++) return true; return false; is true
+PASS return (Zero<letter0); is false
+PASS if ((Zero<letter0)) return true; return false; is false
+PASS var k = 0; while ((Zero<letter0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero<letter0); ) if (k++) return true; return false; is false
+PASS return (Zero<=letter0); is true
+PASS if ((Zero<=letter0)) return true; return false; is true
+PASS var k = 0; while ((Zero<=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=letter0); ) if (k++) return true; return false; is true
+PASS return (Zero<letter0) || 1; is true
+PASS if ((Zero<letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<=letter0) || 1; is true
+PASS if ((Zero<=letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<letter0) && 1; is false
+PASS if ((Zero<letter0) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero<letter0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero<letter0) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero<=letter0) && 1; is true
+PASS if ((Zero<=letter0) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=letter0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=letter0) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero<letter0) || 1; is true
+PASS if ((Zero<letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<=letter0) || 1; is true
+PASS if ((Zero<=letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=letter0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero<letter0); is true
+PASS if (1 || (Zero<letter0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero<letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero<letter0); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero<=letter0); is true
+PASS if (1 || (Zero<=letter0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero<=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero<=letter0); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero<letter0); is false
+PASS if (1 && (Zero<letter0)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero<letter0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero<letter0); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero<=letter0); is true
+PASS if (1 && (Zero<=letter0)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero<=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero<=letter0); ) if (k++) return true; return false; is true
+PASS return (0<letter0); is false
+PASS if ((0<letter0)) return true; return false; is false
+PASS var k = 0; while ((0<letter0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<letter0); ) if (k++) return true; return false; is false
+PASS return (0<=letter0); is true
+PASS if ((0<=letter0)) return true; return false; is true
+PASS var k = 0; while ((0<=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=letter0); ) if (k++) return true; return false; is true
+PASS return (0<letter0) || 1; is true
+PASS if ((0<letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((0<letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=letter0) || 1; is true
+PASS if ((0<=letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (0<letter0) && 1; is false
+PASS if ((0<letter0) && 1) return true; return false; is false
+PASS var k = 0; while ((0<letter0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<letter0) && 1; ) if (k++) return true; return false; is false
+PASS return (0<=letter0) && 1; is true
+PASS if ((0<=letter0) && 1) return true; return false; is true
+PASS var k = 0; while ((0<=letter0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=letter0) && 1; ) if (k++) return true; return false; is true
+PASS return (0<letter0) || 1; is true
+PASS if ((0<letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((0<letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<letter0) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=letter0) || 1; is true
+PASS if ((0<=letter0) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=letter0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=letter0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<letter0); is true
+PASS if (1 || (0<letter0)) return true; return false; is true
+PASS var k = 0; while (1 || (0<letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<letter0); ) if (k++) return true; return false; is true
+PASS return 1 || (0<=letter0); is true
+PASS if (1 || (0<=letter0)) return true; return false; is true
+PASS var k = 0; while (1 || (0<=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<=letter0); ) if (k++) return true; return false; is true
+PASS return 1 && (0<letter0); is false
+PASS if (1 && (0<letter0)) return true; return false; is false
+PASS var k = 0; while (1 && (0<letter0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<letter0); ) if (k++) return true; return false; is false
+PASS return 1 && (0<=letter0); is true
+PASS if (1 && (0<=letter0)) return true; return false; is true
+PASS var k = 0; while (1 && (0<=letter0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<=letter0); ) if (k++) return true; return false; is true
+PASS return (Zero<"0"); is false
+PASS if ((Zero<"0")) return true; return false; is false
+PASS var k = 0; while ((Zero<"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero<"0"); ) if (k++) return true; return false; is false
+PASS return (Zero<="0"); is true
+PASS if ((Zero<="0")) return true; return false; is true
+PASS var k = 0; while ((Zero<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<="0"); ) if (k++) return true; return false; is true
+PASS return (Zero<"0") || 1; is true
+PASS if ((Zero<"0") || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<"0") || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<="0") || 1; is true
+PASS if ((Zero<="0") || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<="0") || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<"0") && 1; is false
+PASS if ((Zero<"0") && 1) return true; return false; is false
+PASS var k = 0; while ((Zero<"0") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero<"0") && 1; ) if (k++) return true; return false; is false
+PASS return (Zero<="0") && 1; is true
+PASS if ((Zero<="0") && 1) return true; return false; is true
+PASS var k = 0; while ((Zero<="0") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<="0") && 1; ) if (k++) return true; return false; is true
+PASS return (Zero<"0") || 1; is true
+PASS if ((Zero<"0") || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<"0") || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<="0") || 1; is true
+PASS if ((Zero<="0") || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<="0") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero<"0"); is true
+PASS if (1 || (Zero<"0")) return true; return false; is true
+PASS var k = 0; while (1 || (Zero<"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero<"0"); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero<="0"); is true
+PASS if (1 || (Zero<="0")) return true; return false; is true
+PASS var k = 0; while (1 || (Zero<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero<="0"); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero<"0"); is false
+PASS if (1 && (Zero<"0")) return true; return false; is false
+PASS var k = 0; while (1 && (Zero<"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero<"0"); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero<="0"); is true
+PASS if (1 && (Zero<="0")) return true; return false; is true
+PASS var k = 0; while (1 && (Zero<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero<="0"); ) if (k++) return true; return false; is true
+PASS return (-1<"0"); is true
+PASS if ((-1<"0")) return true; return false; is true
+PASS var k = 0; while ((-1<"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1<"0"); ) if (k++) return true; return false; is true
+PASS return (-1<="0"); is true
+PASS if ((-1<="0")) return true; return false; is true
+PASS var k = 0; while ((-1<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1<="0"); ) if (k++) return true; return false; is true
+PASS return (-1<"0") || 1; is true
+PASS if ((-1<"0") || 1) return true; return false; is true
+PASS var k = 0; while ((-1<"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1<"0") || 1; ) if (k++) return true; return false; is true
+PASS return (-1<="0") || 1; is true
+PASS if ((-1<="0") || 1) return true; return false; is true
+PASS var k = 0; while ((-1<="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1<="0") || 1; ) if (k++) return true; return false; is true
+PASS return (-1<"0") && 1; is true
+PASS if ((-1<"0") && 1) return true; return false; is true
+PASS var k = 0; while ((-1<"0") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1<"0") && 1; ) if (k++) return true; return false; is true
+PASS return (-1<="0") && 1; is true
+PASS if ((-1<="0") && 1) return true; return false; is true
+PASS var k = 0; while ((-1<="0") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1<="0") && 1; ) if (k++) return true; return false; is true
+PASS return (-1<"0") || 1; is true
+PASS if ((-1<"0") || 1) return true; return false; is true
+PASS var k = 0; while ((-1<"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1<"0") || 1; ) if (k++) return true; return false; is true
+PASS return (-1<="0") || 1; is true
+PASS if ((-1<="0") || 1) return true; return false; is true
+PASS var k = 0; while ((-1<="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (-1<="0") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (-1<"0"); is true
+PASS if (1 || (-1<"0")) return true; return false; is true
+PASS var k = 0; while (1 || (-1<"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (-1<"0"); ) if (k++) return true; return false; is true
+PASS return 1 || (-1<="0"); is true
+PASS if (1 || (-1<="0")) return true; return false; is true
+PASS var k = 0; while (1 || (-1<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (-1<="0"); ) if (k++) return true; return false; is true
+PASS return 1 && (-1<"0"); is true
+PASS if (1 && (-1<"0")) return true; return false; is true
+PASS var k = 0; while (1 && (-1<"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (-1<"0"); ) if (k++) return true; return false; is true
+PASS return 1 && (-1<="0"); is true
+PASS if (1 && (-1<="0")) return true; return false; is true
+PASS var k = 0; while (1 && (-1<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (-1<="0"); ) if (k++) return true; return false; is true
+PASS return (1<"0"); is false
+PASS if ((1<"0")) return true; return false; is false
+PASS var k = 0; while ((1<"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<"0"); ) if (k++) return true; return false; is false
+PASS return (1<="0"); is false
+PASS if ((1<="0")) return true; return false; is false
+PASS var k = 0; while ((1<="0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<="0"); ) if (k++) return true; return false; is false
+PASS return (1<"0") || 1; is true
+PASS if ((1<"0") || 1) return true; return false; is true
+PASS var k = 0; while ((1<"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<"0") || 1; ) if (k++) return true; return false; is true
+PASS return (1<="0") || 1; is true
+PASS if ((1<="0") || 1) return true; return false; is true
+PASS var k = 0; while ((1<="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<="0") || 1; ) if (k++) return true; return false; is true
+PASS return (1<"0") && 1; is false
+PASS if ((1<"0") && 1) return true; return false; is false
+PASS var k = 0; while ((1<"0") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<"0") && 1; ) if (k++) return true; return false; is false
+PASS return (1<="0") && 1; is false
+PASS if ((1<="0") && 1) return true; return false; is false
+PASS var k = 0; while ((1<="0") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<="0") && 1; ) if (k++) return true; return false; is false
+PASS return (1<"0") || 1; is true
+PASS if ((1<"0") || 1) return true; return false; is true
+PASS var k = 0; while ((1<"0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<"0") || 1; ) if (k++) return true; return false; is true
+PASS return (1<="0") || 1; is true
+PASS if ((1<="0") || 1) return true; return false; is true
+PASS var k = 0; while ((1<="0") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<="0") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (1<"0"); is true
+PASS if (1 || (1<"0")) return true; return false; is true
+PASS var k = 0; while (1 || (1<"0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1<"0"); ) if (k++) return true; return false; is true
+PASS return 1 || (1<="0"); is true
+PASS if (1 || (1<="0")) return true; return false; is true
+PASS var k = 0; while (1 || (1<="0")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1<="0"); ) if (k++) return true; return false; is true
+PASS return 1 && (1<"0"); is false
+PASS if (1 && (1<"0")) return true; return false; is false
+PASS var k = 0; while (1 && (1<"0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1<"0"); ) if (k++) return true; return false; is false
+PASS return 1 && (1<="0"); is false
+PASS if (1 && (1<="0")) return true; return false; is false
+PASS var k = 0; while (1 && (1<="0")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1<="0"); ) if (k++) return true; return false; is false
+PASS return (0<"-1"); is false
+PASS if ((0<"-1")) return true; return false; is false
+PASS var k = 0; while ((0<"-1")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<"-1"); ) if (k++) return true; return false; is false
+PASS return (0<="-1"); is false
+PASS if ((0<="-1")) return true; return false; is false
+PASS var k = 0; while ((0<="-1")) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<="-1"); ) if (k++) return true; return false; is false
+PASS return (0<"-1") || 1; is true
+PASS if ((0<"-1") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"-1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"-1") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="-1") || 1; is true
+PASS if ((0<="-1") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="-1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="-1") || 1; ) if (k++) return true; return false; is true
+PASS return (0<"-1") && 1; is false
+PASS if ((0<"-1") && 1) return true; return false; is false
+PASS var k = 0; while ((0<"-1") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<"-1") && 1; ) if (k++) return true; return false; is false
+PASS return (0<="-1") && 1; is false
+PASS if ((0<="-1") && 1) return true; return false; is false
+PASS var k = 0; while ((0<="-1") && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<="-1") && 1; ) if (k++) return true; return false; is false
+PASS return (0<"-1") || 1; is true
+PASS if ((0<"-1") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"-1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"-1") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="-1") || 1; is true
+PASS if ((0<="-1") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="-1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="-1") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<"-1"); is true
+PASS if (1 || (0<"-1")) return true; return false; is true
+PASS var k = 0; while (1 || (0<"-1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<"-1"); ) if (k++) return true; return false; is true
+PASS return 1 || (0<="-1"); is true
+PASS if (1 || (0<="-1")) return true; return false; is true
+PASS var k = 0; while (1 || (0<="-1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<="-1"); ) if (k++) return true; return false; is true
+PASS return 1 && (0<"-1"); is false
+PASS if (1 && (0<"-1")) return true; return false; is false
+PASS var k = 0; while (1 && (0<"-1")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<"-1"); ) if (k++) return true; return false; is false
+PASS return 1 && (0<="-1"); is false
+PASS if (1 && (0<="-1")) return true; return false; is false
+PASS var k = 0; while (1 && (0<="-1")) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<="-1"); ) if (k++) return true; return false; is false
+PASS return (0<"1"); is true
+PASS if ((0<"1")) return true; return false; is true
+PASS var k = 0; while ((0<"1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"1"); ) if (k++) return true; return false; is true
+PASS return (0<="1"); is true
+PASS if ((0<="1")) return true; return false; is true
+PASS var k = 0; while ((0<="1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="1"); ) if (k++) return true; return false; is true
+PASS return (0<"1") || 1; is true
+PASS if ((0<"1") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"1") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="1") || 1; is true
+PASS if ((0<="1") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="1") || 1; ) if (k++) return true; return false; is true
+PASS return (0<"1") && 1; is true
+PASS if ((0<"1") && 1) return true; return false; is true
+PASS var k = 0; while ((0<"1") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"1") && 1; ) if (k++) return true; return false; is true
+PASS return (0<="1") && 1; is true
+PASS if ((0<="1") && 1) return true; return false; is true
+PASS var k = 0; while ((0<="1") && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="1") && 1; ) if (k++) return true; return false; is true
+PASS return (0<"1") || 1; is true
+PASS if ((0<"1") || 1) return true; return false; is true
+PASS var k = 0; while ((0<"1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<"1") || 1; ) if (k++) return true; return false; is true
+PASS return (0<="1") || 1; is true
+PASS if ((0<="1") || 1) return true; return false; is true
+PASS var k = 0; while ((0<="1") || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<="1") || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<"1"); is true
+PASS if (1 || (0<"1")) return true; return false; is true
+PASS var k = 0; while (1 || (0<"1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<"1"); ) if (k++) return true; return false; is true
+PASS return 1 || (0<="1"); is true
+PASS if (1 || (0<="1")) return true; return false; is true
+PASS var k = 0; while (1 || (0<="1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<="1"); ) if (k++) return true; return false; is true
+PASS return 1 && (0<"1"); is true
+PASS if (1 && (0<"1")) return true; return false; is true
+PASS var k = 0; while (1 && (0<"1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<"1"); ) if (k++) return true; return false; is true
+PASS return 1 && (0<="1"); is true
+PASS if (1 && (0<="1")) return true; return false; is true
+PASS var k = 0; while (1 && (0<="1")) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<="1"); ) if (k++) return true; return false; is true
+PASS return (0<1); is true
+PASS if ((0<1)) return true; return false; is true
+PASS var k = 0; while ((0<1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<1); ) if (k++) return true; return false; is true
+PASS return (0<=1); is true
+PASS if ((0<=1)) return true; return false; is true
+PASS var k = 0; while ((0<=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=1); ) if (k++) return true; return false; is true
+PASS return (0<1) || 1; is true
+PASS if ((0<1) || 1) return true; return false; is true
+PASS var k = 0; while ((0<1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<1) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=1) || 1; is true
+PASS if ((0<=1) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=1) || 1; ) if (k++) return true; return false; is true
+PASS return (0<1) && 1; is true
+PASS if ((0<1) && 1) return true; return false; is true
+PASS var k = 0; while ((0<1) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<1) && 1; ) if (k++) return true; return false; is true
+PASS return (0<=1) && 1; is true
+PASS if ((0<=1) && 1) return true; return false; is true
+PASS var k = 0; while ((0<=1) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=1) && 1; ) if (k++) return true; return false; is true
+PASS return (0<1) || 1; is true
+PASS if ((0<1) || 1) return true; return false; is true
+PASS var k = 0; while ((0<1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<1) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=1) || 1; is true
+PASS if ((0<=1) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=1) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<1); is true
+PASS if (1 || (0<1)) return true; return false; is true
+PASS var k = 0; while (1 || (0<1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<1); ) if (k++) return true; return false; is true
+PASS return 1 || (0<=1); is true
+PASS if (1 || (0<=1)) return true; return false; is true
+PASS var k = 0; while (1 || (0<=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<=1); ) if (k++) return true; return false; is true
+PASS return 1 && (0<1); is true
+PASS if (1 && (0<1)) return true; return false; is true
+PASS var k = 0; while (1 && (0<1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<1); ) if (k++) return true; return false; is true
+PASS return 1 && (0<=1); is true
+PASS if (1 && (0<=1)) return true; return false; is true
+PASS var k = 0; while (1 && (0<=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<=1); ) if (k++) return true; return false; is true
+PASS return (0<0); is false
+PASS if ((0<0)) return true; return false; is false
+PASS var k = 0; while ((0<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<0); ) if (k++) return true; return false; is false
+PASS return (0<=0); is true
+PASS if ((0<=0)) return true; return false; is true
+PASS var k = 0; while ((0<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=0); ) if (k++) return true; return false; is true
+PASS return (0<0) || 1; is true
+PASS if ((0<0) || 1) return true; return false; is true
+PASS var k = 0; while ((0<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<0) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=0) || 1; is true
+PASS if ((0<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=0) || 1; ) if (k++) return true; return false; is true
+PASS return (0<0) && 1; is false
+PASS if ((0<0) && 1) return true; return false; is false
+PASS var k = 0; while ((0<0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (0<0) && 1; ) if (k++) return true; return false; is false
+PASS return (0<=0) && 1; is true
+PASS if ((0<=0) && 1) return true; return false; is true
+PASS var k = 0; while ((0<=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=0) && 1; ) if (k++) return true; return false; is true
+PASS return (0<0) || 1; is true
+PASS if ((0<0) || 1) return true; return false; is true
+PASS var k = 0; while ((0<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<0) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=0) || 1; is true
+PASS if ((0<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<0); is true
+PASS if (1 || (0<0)) return true; return false; is true
+PASS var k = 0; while (1 || (0<0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<0); ) if (k++) return true; return false; is true
+PASS return 1 || (0<=0); is true
+PASS if (1 || (0<=0)) return true; return false; is true
+PASS var k = 0; while (1 || (0<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<=0); ) if (k++) return true; return false; is true
+PASS return 1 && (0<0); is false
+PASS if (1 && (0<0)) return true; return false; is false
+PASS var k = 0; while (1 && (0<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (0<0); ) if (k++) return true; return false; is false
+PASS return 1 && (0<=0); is true
+PASS if (1 && (0<=0)) return true; return false; is true
+PASS var k = 0; while (1 && (0<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<=0); ) if (k++) return true; return false; is true
+PASS return (1<0); is false
+PASS if ((1<0)) return true; return false; is false
+PASS var k = 0; while ((1<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<0); ) if (k++) return true; return false; is false
+PASS return (1<=0); is false
+PASS if ((1<=0)) return true; return false; is false
+PASS var k = 0; while ((1<=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<=0); ) if (k++) return true; return false; is false
+PASS return (1<0) || 1; is true
+PASS if ((1<0) || 1) return true; return false; is true
+PASS var k = 0; while ((1<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<0) || 1; ) if (k++) return true; return false; is true
+PASS return (1<=0) || 1; is true
+PASS if ((1<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((1<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<=0) || 1; ) if (k++) return true; return false; is true
+PASS return (1<0) && 1; is false
+PASS if ((1<0) && 1) return true; return false; is false
+PASS var k = 0; while ((1<0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<0) && 1; ) if (k++) return true; return false; is false
+PASS return (1<=0) && 1; is false
+PASS if ((1<=0) && 1) return true; return false; is false
+PASS var k = 0; while ((1<=0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<=0) && 1; ) if (k++) return true; return false; is false
+PASS return (1<0) || 1; is true
+PASS if ((1<0) || 1) return true; return false; is true
+PASS var k = 0; while ((1<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<0) || 1; ) if (k++) return true; return false; is true
+PASS return (1<=0) || 1; is true
+PASS if ((1<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((1<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (1<0); is true
+PASS if (1 || (1<0)) return true; return false; is true
+PASS var k = 0; while (1 || (1<0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1<0); ) if (k++) return true; return false; is true
+PASS return 1 || (1<=0); is true
+PASS if (1 || (1<=0)) return true; return false; is true
+PASS var k = 0; while (1 || (1<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1<=0); ) if (k++) return true; return false; is true
+PASS return 1 && (1<0); is false
+PASS if (1 && (1<0)) return true; return false; is false
+PASS var k = 0; while (1 && (1<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1<0); ) if (k++) return true; return false; is false
+PASS return 1 && (1<=0); is false
+PASS if (1 && (1<=0)) return true; return false; is false
+PASS var k = 0; while (1 && (1<=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1<=0); ) if (k++) return true; return false; is false
+PASS return (Zero<1); is true
+PASS if ((Zero<1)) return true; return false; is true
+PASS var k = 0; while ((Zero<1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<1); ) if (k++) return true; return false; is true
+PASS return (Zero<=1); is true
+PASS if ((Zero<=1)) return true; return false; is true
+PASS var k = 0; while ((Zero<=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=1); ) if (k++) return true; return false; is true
+PASS return (Zero<1) || 1; is true
+PASS if ((Zero<1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<=1) || 1; is true
+PASS if ((Zero<=1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<1) && 1; is true
+PASS if ((Zero<1) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero<1) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<1) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero<=1) && 1; is true
+PASS if ((Zero<=1) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=1) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=1) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero<1) || 1; is true
+PASS if ((Zero<1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<1) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<=1) || 1; is true
+PASS if ((Zero<=1) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=1) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=1) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero<1); is true
+PASS if (1 || (Zero<1)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero<1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero<1); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero<=1); is true
+PASS if (1 || (Zero<=1)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero<=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero<=1); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero<1); is true
+PASS if (1 && (Zero<1)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero<1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero<1); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero<=1); is true
+PASS if (1 && (Zero<=1)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero<=1)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero<=1); ) if (k++) return true; return false; is true
+PASS return (Zero<0); is false
+PASS if ((Zero<0)) return true; return false; is false
+PASS var k = 0; while ((Zero<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero<0); ) if (k++) return true; return false; is false
+PASS return (Zero<=0); is true
+PASS if ((Zero<=0)) return true; return false; is true
+PASS var k = 0; while ((Zero<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=0); ) if (k++) return true; return false; is true
+PASS return (Zero<0) || 1; is true
+PASS if ((Zero<0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<=0) || 1; is true
+PASS if ((Zero<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<0) && 1; is false
+PASS if ((Zero<0) && 1) return true; return false; is false
+PASS var k = 0; while ((Zero<0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (Zero<0) && 1; ) if (k++) return true; return false; is false
+PASS return (Zero<=0) && 1; is true
+PASS if ((Zero<=0) && 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=0) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=0) && 1; ) if (k++) return true; return false; is true
+PASS return (Zero<0) || 1; is true
+PASS if ((Zero<0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<0) || 1; ) if (k++) return true; return false; is true
+PASS return (Zero<=0) || 1; is true
+PASS if ((Zero<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((Zero<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (Zero<=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (Zero<0); is true
+PASS if (1 || (Zero<0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero<0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero<0); ) if (k++) return true; return false; is true
+PASS return 1 || (Zero<=0); is true
+PASS if (1 || (Zero<=0)) return true; return false; is true
+PASS var k = 0; while (1 || (Zero<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (Zero<=0); ) if (k++) return true; return false; is true
+PASS return 1 && (Zero<0); is false
+PASS if (1 && (Zero<0)) return true; return false; is false
+PASS var k = 0; while (1 && (Zero<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (Zero<0); ) if (k++) return true; return false; is false
+PASS return 1 && (Zero<=0); is true
+PASS if (1 && (Zero<=0)) return true; return false; is true
+PASS var k = 0; while (1 && (Zero<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (Zero<=0); ) if (k++) return true; return false; is true
+PASS return (1<Zero); is false
+PASS if ((1<Zero)) return true; return false; is false
+PASS var k = 0; while ((1<Zero)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<Zero); ) if (k++) return true; return false; is false
+PASS return (1<=Zero); is false
+PASS if ((1<=Zero)) return true; return false; is false
+PASS var k = 0; while ((1<=Zero)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<=Zero); ) if (k++) return true; return false; is false
+PASS return (1<Zero) || 1; is true
+PASS if ((1<Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1<Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1<=Zero) || 1; is true
+PASS if ((1<=Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1<=Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<=Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1<Zero) && 1; is false
+PASS if ((1<Zero) && 1) return true; return false; is false
+PASS var k = 0; while ((1<Zero) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<Zero) && 1; ) if (k++) return true; return false; is false
+PASS return (1<=Zero) && 1; is false
+PASS if ((1<=Zero) && 1) return true; return false; is false
+PASS var k = 0; while ((1<=Zero) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (1<=Zero) && 1; ) if (k++) return true; return false; is false
+PASS return (1<Zero) || 1; is true
+PASS if ((1<Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1<Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<Zero) || 1; ) if (k++) return true; return false; is true
+PASS return (1<=Zero) || 1; is true
+PASS if ((1<=Zero) || 1) return true; return false; is true
+PASS var k = 0; while ((1<=Zero) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (1<=Zero) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (1<Zero); is true
+PASS if (1 || (1<Zero)) return true; return false; is true
+PASS var k = 0; while (1 || (1<Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1<Zero); ) if (k++) return true; return false; is true
+PASS return 1 || (1<=Zero); is true
+PASS if (1 || (1<=Zero)) return true; return false; is true
+PASS var k = 0; while (1 || (1<=Zero)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (1<=Zero); ) if (k++) return true; return false; is true
+PASS return 1 && (1<Zero); is false
+PASS if (1 && (1<Zero)) return true; return false; is false
+PASS var k = 0; while (1 && (1<Zero)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1<Zero); ) if (k++) return true; return false; is false
+PASS return 1 && (1<=Zero); is false
+PASS if (1 && (1<=Zero)) return true; return false; is false
+PASS var k = 0; while (1 && (1<=Zero)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (1<=Zero); ) if (k++) return true; return false; is false
+PASS return (0<One); is true
+PASS if ((0<One)) return true; return false; is true
+PASS var k = 0; while ((0<One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<One); ) if (k++) return true; return false; is true
+PASS return (0<=One); is true
+PASS if ((0<=One)) return true; return false; is true
+PASS var k = 0; while ((0<=One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=One); ) if (k++) return true; return false; is true
+PASS return (0<One) || 1; is true
+PASS if ((0<One) || 1) return true; return false; is true
+PASS var k = 0; while ((0<One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<One) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=One) || 1; is true
+PASS if ((0<=One) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=One) || 1; ) if (k++) return true; return false; is true
+PASS return (0<One) && 1; is true
+PASS if ((0<One) && 1) return true; return false; is true
+PASS var k = 0; while ((0<One) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<One) && 1; ) if (k++) return true; return false; is true
+PASS return (0<=One) && 1; is true
+PASS if ((0<=One) && 1) return true; return false; is true
+PASS var k = 0; while ((0<=One) && 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=One) && 1; ) if (k++) return true; return false; is true
+PASS return (0<One) || 1; is true
+PASS if ((0<One) || 1) return true; return false; is true
+PASS var k = 0; while ((0<One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<One) || 1; ) if (k++) return true; return false; is true
+PASS return (0<=One) || 1; is true
+PASS if ((0<=One) || 1) return true; return false; is true
+PASS var k = 0; while ((0<=One) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (0<=One) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (0<One); is true
+PASS if (1 || (0<One)) return true; return false; is true
+PASS var k = 0; while (1 || (0<One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<One); ) if (k++) return true; return false; is true
+PASS return 1 || (0<=One); is true
+PASS if (1 || (0<=One)) return true; return false; is true
+PASS var k = 0; while (1 || (0<=One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (0<=One); ) if (k++) return true; return false; is true
+PASS return 1 && (0<One); is true
+PASS if (1 && (0<One)) return true; return false; is true
+PASS var k = 0; while (1 && (0<One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<One); ) if (k++) return true; return false; is true
+PASS return 1 && (0<=One); is true
+PASS if (1 && (0<=One)) return true; return false; is true
+PASS var k = 0; while (1 && (0<=One)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 && (0<=One); ) if (k++) return true; return false; is true
+PASS return (One<0); is false
+PASS if ((One<0)) return true; return false; is false
+PASS var k = 0; while ((One<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (One<0); ) if (k++) return true; return false; is false
+PASS return (One<=0); is false
+PASS if ((One<=0)) return true; return false; is false
+PASS var k = 0; while ((One<=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; (One<=0); ) if (k++) return true; return false; is false
+PASS return (One<0) || 1; is true
+PASS if ((One<0) || 1) return true; return false; is true
+PASS var k = 0; while ((One<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One<0) || 1; ) if (k++) return true; return false; is true
+PASS return (One<=0) || 1; is true
+PASS if ((One<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((One<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One<=0) || 1; ) if (k++) return true; return false; is true
+PASS return (One<0) && 1; is false
+PASS if ((One<0) && 1) return true; return false; is false
+PASS var k = 0; while ((One<0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (One<0) && 1; ) if (k++) return true; return false; is false
+PASS return (One<=0) && 1; is false
+PASS if ((One<=0) && 1) return true; return false; is false
+PASS var k = 0; while ((One<=0) && 1) if (k++) return true; return false; is false
+PASS var k = 0; for (; (One<=0) && 1; ) if (k++) return true; return false; is false
+PASS return (One<0) || 1; is true
+PASS if ((One<0) || 1) return true; return false; is true
+PASS var k = 0; while ((One<0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One<0) || 1; ) if (k++) return true; return false; is true
+PASS return (One<=0) || 1; is true
+PASS if ((One<=0) || 1) return true; return false; is true
+PASS var k = 0; while ((One<=0) || 1) if (k++) return true; return false; is true
+PASS var k = 0; for (; (One<=0) || 1; ) if (k++) return true; return false; is true
+PASS return 1 || (One<0); is true
+PASS if (1 || (One<0)) return true; return false; is true
+PASS var k = 0; while (1 || (One<0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (One<0); ) if (k++) return true; return false; is true
+PASS return 1 || (One<=0); is true
+PASS if (1 || (One<=0)) return true; return false; is true
+PASS var k = 0; while (1 || (One<=0)) if (k++) return true; return false; is true
+PASS var k = 0; for (; 1 || (One<=0); ) if (k++) return true; return false; is true
+PASS return 1 && (One<0); is false
+PASS if (1 && (One<0)) return true; return false; is false
+PASS var k = 0; while (1 && (One<0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (One<0); ) if (k++) return true; return false; is false
+PASS return 1 && (One<=0); is false
+PASS if (1 && (One<=0)) return true; return false; is false
+PASS var k = 0; while (1 && (One<=0)) if (k++) return true; return false; is false
+PASS var k = 0; for (; 1 && (One<=0); ) if (k++) return true; return false; is false
+PASS 0 <= 0 is true
+PASS 0 <= 1 is true
+PASS 1 <= 1 is true
+PASS 0 < 1 is true
+PASS 1 <= 0 is false
+PASS 2 <= 1 is false
+PASS 1 < 1 is false
+PASS 2 < 1 is false
+PASS if (0 <= 0 || 0) true; else false is true
+PASS if (0 <= 1 || 0) true; else false is true
+PASS if (1 <= 1 || 0) true; else false is true
+PASS if (0 <  1 || 0) true; else false is true
+PASS if (1 <= 0 || 0) true; else false is false
+PASS if (2 <= 1 || 0) true; else false is false
+PASS if (1 <  1 || 0) true; else false is false
+PASS if (2 <  1 || 0) true; else false is false
+PASS 0 <= 0.5 is true
+PASS 0 <= 1.5 is true
+PASS 1 <= 1.5 is true
+PASS 0 < 1.5 is true
+PASS 1 <= 0.5 is false
+PASS 2 <= 1.5 is false
+PASS 1 < 1.5 is true
+PASS 2 < 1.5 is false
+PASS if (0 <= 0.5 || 0) true; else false is true
+PASS if (0 <= 1.5 || 0) true; else false is true
+PASS if (1 <= 1.5 || 0) true; else false is true
+PASS if (0 <  1.5 || 0) true; else false is true
+PASS if (1 <= 0.5 || 0) true; else false is false
+PASS if (2 <= 1.5 || 0) true; else false is false
+PASS if (1 <  1.5 || 0) true; else false is true
+PASS if (2 <  1.5 || 0) true; else false is false
+PASS zero <= zero is true
+PASS zero <= 1 is true
+PASS 1 <= 1 is true
+PASS zero < 1 is true
+PASS 1 <= zero is false
+PASS 2 <= 1 is false
+PASS 1 < 1 is false
+PASS 2 < 1 is false
+PASS if (zero <= zero || 0) true; else false is true
+PASS if (zero <= 1 || zero) true; else false is true
+PASS if (1 <= 1 || zero) true; else false is true
+PASS if (zero <  1 || zero) true; else false is true
+PASS if (1 <= zero || zero) true; else false is false
+PASS if (2 <= 1 || zero) true; else false is false
+PASS if (1 <  1 || zero) true; else false is false
+PASS if (2 <  1 || zero) true; else false is false
+PASS 0 <= p5 is true
+PASS 0 <= p15 is true
+PASS 1 <= p15 is true
+PASS 0 < p15 is true
+PASS 1 <= p5 is false
+PASS 2 <= p15 is false
+PASS 1 < p15 is true
+PASS 2 < p15 is false
+PASS if (0 <= p5 || 0) true; else false is true
+PASS if (0 <= p15 || 0) true; else false is true
+PASS if (1 <= p15 || 0) true; else false is true
+PASS if (0 <  p15 || 0) true; else false is true
+PASS if (1 <= p5 || 0) true; else false is false
+PASS if (2 <= p15 || 0) true; else false is false
+PASS if (1 <  p15 || 0) true; else false is true
+PASS if (2 <  p15 || 0) true; else false is false
+PASS zero <= zero is true
+PASS zero <= one is true
+PASS one <= one is true
+PASS zero < one is true
+PASS one <= zero is false
+PASS two <= one is false
+PASS one < one is false
+PASS two < one is false
+PASS if (zero <= zero || 0) true; else false is true
+PASS if (zero <= one || zero) true; else false is true
+PASS if (one <= one || zero) true; else false is true
+PASS if (zero <  one || zero) true; else false is true
+PASS if (one <= zero || zero) true; else false is false
+PASS if (two <= one || zero) true; else false is false
+PASS if (one <  one || zero) true; else false is false
+PASS if (two <  one || zero) true; else false is false
+PASS 0 <= p5 is true
+PASS 0 <= p15 is true
+PASS one <= p15 is true
+PASS 0 < p15 is true
+PASS one <= p5 is false
+PASS two <= p15 is false
+PASS one < p15 is true
+PASS two < p15 is false
+PASS if (0 <= p5 || 0) true; else false is true
+PASS if (0 <= p15 || 0) true; else false is true
+PASS if (one <= p15 || 0) true; else false is true
+PASS if (0 <  p15 || 0) true; else false is true
+PASS if (one <= p5 || 0) true; else false is false
+PASS if (two <= p15 || 0) true; else false is false
+PASS if (one <  p15 || 0) true; else false is true
+PASS if (two <  p15 || 0) true; else false is false
+PASS  0 <    NaN is false
+PASS  NaN <  NaN is false
+PASS  0 <=   NaN is false
+PASS  NaN <= NaN is false
+PASS  0.5 <  NaN is false
+PASS  NaN <  NaN is false
+PASS  0.5 <= NaN is false
+PASS  NaN <= NaN is false
+PASS  zero < NaN is false
+PASS zero <= NaN is false
+PASS  NaN <= NaN is false
+PASS  p5  <  NaN is false
+PASS NaN  <  NaN is false
+PASS p5  <=  NaN is false
+PASS NaN  <= NaN is false
+PASS if ( 0 <    NaN) true; else false; is false
+PASS if ( NaN <  NaN) true; else false; is false
+PASS if ( 0 <=   NaN) true; else false; is false
+PASS if ( NaN <= NaN) true; else false; is false
+PASS if ( 0.5 <  NaN) true; else false; is false
+PASS if ( NaN <  NaN) true; else false; is false
+PASS if ( 0.5 <= NaN) true; else false; is false
+PASS if ( NaN <= NaN) true; else false; is false
+PASS if ( zero < NaN) true; else false; is false
+PASS if (zero <= NaN) true; else false; is false
+PASS if ( NaN <= NaN) true; else false; is false
+PASS if ( p5  <  NaN) true; else false; is false
+PASS if (NaN  <  NaN) true; else false; is false
+PASS if (p5  <=  NaN) true; else false; is false
+PASS if (NaN  <= NaN) true; else false; is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/comparison-operators-less.js b/test/webkit/comparison-operators-less.js
new file mode 100644 (file)
index 0000000..89c81cf
--- /dev/null
@@ -0,0 +1,252 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("test that comparison operators work correctly.")
+
+function makeTest(start, end, expression, relationship, override, invert) {
+    var resultValue = eval(relationship + expression + 0) || !!override;
+    if (invert)
+        resultValue = !resultValue;
+    var expr = start + expression + end;
+    var result = [];
+    function func(content) { var f = new Function(content); f.toString = function(){ return content}; return f; }
+    result.push([new func("return " + expr + ";"), resultValue]);
+    result.push([new func("if (" + expr + ") return true; return false;"), resultValue]);
+    result.push([new func("var k = 0; while (" + expr + ") if (k++) return true; return false;"), resultValue]);
+    result.push([new func("var k = 0; for (; " + expr + "; ) if (k++) return true; return false;"), resultValue]);
+    return result;
+}
+function doTest(lhs, rhs, relationship) {
+    var expressionParts = [["(",")"],["(", ") || 1", true],["(", ") && 1"],["(", ") || 1", true],["1 || (",")", true],["1 && (",")"]];
+    var expressions = [];
+    var tests = [];
+    for (var i = 0; i < expressionParts.length; i++) {
+        var start = expressionParts[i][0] + lhs;
+        var end = String(rhs) + expressionParts[i][1];
+        tests.push.apply(tests, makeTest(start, end, "<", relationship, expressionParts[i][2]));
+        tests.push.apply(tests, makeTest(start, end, "<=", relationship, expressionParts[i][2]));
+    }
+    for (var i = 0; i < tests.length; i++) {
+        if ((r=tests[i][0]()) == tests[i][1])
+            testPassed(tests[i][0] + " is " + tests[i][1]);
+        else
+            testFailed(tests[i][0] + " is " + r + " and should be " + tests[i][1] + ".");
+    }
+}
+
+var letterA = "a";
+var letterB = "b";
+var letter0 = "0";
+var One = 1;
+var Zero = 0;
+doTest('"a"', '"b"', -1);
+doTest('"a"', '"a"', 0);
+doTest('"b"', '"a"', 1);
+doTest('letterA', '"b"', -1);
+doTest('letterA', '"a"', 0);
+doTest('"b"', '"a"', 1);
+doTest('letterA', '"b"', -1);
+doTest('letterA', 'letterA', 0);
+doTest('"b"', 'letterA', 1);
+doTest('"a"', '"b"', -1);
+doTest('"a"', 'letterA', 0);
+doTest('"b"', 'letterA', 1);
+
+doTest('"a"', '0', NaN);
+doTest('0', '"a"', NaN);
+doTest('letterA', '0', NaN);
+doTest('letterA', '"a"', 0);
+doTest('0', '"a"', NaN);
+doTest('letterA', 'letterA', 0);
+doTest('0', 'letterA', NaN);
+doTest('"a"', 'letterA', 0);
+doTest('0', 'letterA', NaN);
+
+
+doTest('0', '"0"', 0);
+doTest('Zero', 'letter0', 0);
+doTest('0', 'letter0', 0);
+doTest('Zero', '"0"', 0);
+doTest('-1', '"0"', -1);
+doTest('1', '"0"', 1);
+doTest('0', '"-1"', 1);
+doTest('0', '"1"', -1);
+
+doTest('0', '1', -1);
+doTest('0', '0', 0);
+doTest('1', '0', 1);
+doTest('Zero', '1', -1);
+doTest('Zero', '0', 0);
+doTest('1', 'Zero', 1);
+doTest('0', 'One', -1);
+doTest('One', '0', 1);
+
+shouldBeTrue("0 <= 0");
+shouldBeTrue("0 <= 1");
+shouldBeTrue("1 <= 1");
+shouldBeTrue("0 < 1");
+shouldBeFalse("1 <= 0");
+shouldBeFalse("2 <= 1");
+shouldBeFalse("1 < 1");
+shouldBeFalse("2 < 1");
+
+ shouldBeTrue("if (0 <= 0 || 0) true; else false");
+ shouldBeTrue("if (0 <= 1 || 0) true; else false");
+ shouldBeTrue("if (1 <= 1 || 0) true; else false");
+ shouldBeTrue("if (0 <  1 || 0) true; else false");
+shouldBeFalse("if (1 <= 0 || 0) true; else false");
+shouldBeFalse("if (2 <= 1 || 0) true; else false");
+shouldBeFalse("if (1 <  1 || 0) true; else false");
+shouldBeFalse("if (2 <  1 || 0) true; else false");
+
+shouldBeTrue("0 <= 0.5");
+shouldBeTrue("0 <= 1.5");
+shouldBeTrue("1 <= 1.5");
+shouldBeTrue("0 < 1.5");
+shouldBeFalse("1 <= 0.5");
+shouldBeFalse("2 <= 1.5");
+shouldBeTrue("1 < 1.5");
+shouldBeFalse("2 < 1.5");
+
+ shouldBeTrue("if (0 <= 0.5 || 0) true; else false");
+ shouldBeTrue("if (0 <= 1.5 || 0) true; else false");
+ shouldBeTrue("if (1 <= 1.5 || 0) true; else false");
+ shouldBeTrue("if (0 <  1.5 || 0) true; else false");
+shouldBeFalse("if (1 <= 0.5 || 0) true; else false");
+shouldBeFalse("if (2 <= 1.5 || 0) true; else false");
+ shouldBeTrue("if (1 <  1.5 || 0) true; else false");
+shouldBeFalse("if (2 <  1.5 || 0) true; else false");
+
+var zero = 0;
+var one = 1;
+var two = 2;
+var p5 = 0.5;
+var p15 = 1.5;
+
+
+shouldBeTrue("zero <= zero");
+shouldBeTrue("zero <= 1");
+shouldBeTrue("1 <= 1");
+shouldBeTrue("zero < 1");
+shouldBeFalse("1 <= zero");
+shouldBeFalse("2 <= 1");
+shouldBeFalse("1 < 1");
+shouldBeFalse("2 < 1");
+
+ shouldBeTrue("if (zero <= zero || 0) true; else false");
+ shouldBeTrue("if (zero <= 1 || zero) true; else false");
+ shouldBeTrue("if (1 <= 1 || zero) true; else false");
+ shouldBeTrue("if (zero <  1 || zero) true; else false");
+shouldBeFalse("if (1 <= zero || zero) true; else false");
+shouldBeFalse("if (2 <= 1 || zero) true; else false");
+shouldBeFalse("if (1 <  1 || zero) true; else false");
+shouldBeFalse("if (2 <  1 || zero) true; else false");
+
+shouldBeTrue("0 <= p5");
+shouldBeTrue("0 <= p15");
+shouldBeTrue("1 <= p15");
+shouldBeTrue("0 < p15");
+shouldBeFalse("1 <= p5");
+shouldBeFalse("2 <= p15");
+shouldBeTrue("1 < p15");
+shouldBeFalse("2 < p15");
+
+ shouldBeTrue("if (0 <= p5 || 0) true; else false");
+ shouldBeTrue("if (0 <= p15 || 0) true; else false");
+ shouldBeTrue("if (1 <= p15 || 0) true; else false");
+ shouldBeTrue("if (0 <  p15 || 0) true; else false");
+shouldBeFalse("if (1 <= p5 || 0) true; else false");
+shouldBeFalse("if (2 <= p15 || 0) true; else false");
+ shouldBeTrue("if (1 <  p15 || 0) true; else false");
+shouldBeFalse("if (2 <  p15 || 0) true; else false");
+
+
+shouldBeTrue("zero <= zero");
+shouldBeTrue("zero <= one");
+shouldBeTrue("one <= one");
+shouldBeTrue("zero < one");
+shouldBeFalse("one <= zero");
+shouldBeFalse("two <= one");
+shouldBeFalse("one < one");
+shouldBeFalse("two < one");
+
+ shouldBeTrue("if (zero <= zero || 0) true; else false");
+ shouldBeTrue("if (zero <= one || zero) true; else false");
+ shouldBeTrue("if (one <= one || zero) true; else false");
+ shouldBeTrue("if (zero <  one || zero) true; else false");
+shouldBeFalse("if (one <= zero || zero) true; else false");
+shouldBeFalse("if (two <= one || zero) true; else false");
+shouldBeFalse("if (one <  one || zero) true; else false");
+shouldBeFalse("if (two <  one || zero) true; else false");
+
+shouldBeTrue("0 <= p5");
+shouldBeTrue("0 <= p15");
+shouldBeTrue("one <= p15");
+shouldBeTrue("0 < p15");
+shouldBeFalse("one <= p5");
+shouldBeFalse("two <= p15");
+shouldBeTrue("one < p15");
+shouldBeFalse("two < p15");
+
+ shouldBeTrue("if (0 <= p5 || 0) true; else false");
+ shouldBeTrue("if (0 <= p15 || 0) true; else false");
+ shouldBeTrue("if (one <= p15 || 0) true; else false");
+ shouldBeTrue("if (0 <  p15 || 0) true; else false");
+shouldBeFalse("if (one <= p5 || 0) true; else false");
+shouldBeFalse("if (two <= p15 || 0) true; else false");
+ shouldBeTrue("if (one <  p15 || 0) true; else false");
+shouldBeFalse("if (two <  p15 || 0) true; else false");
+
+
+shouldBeFalse(" 0 <    NaN");
+shouldBeFalse(" NaN <  NaN");
+shouldBeFalse(" 0 <=   NaN");
+shouldBeFalse(" NaN <= NaN");
+shouldBeFalse(" 0.5 <  NaN");
+shouldBeFalse(" NaN <  NaN");
+shouldBeFalse(" 0.5 <= NaN");
+shouldBeFalse(" NaN <= NaN");
+shouldBeFalse(" zero < NaN");
+shouldBeFalse("zero <= NaN");
+shouldBeFalse(" NaN <= NaN");
+shouldBeFalse(" p5  <  NaN");
+shouldBeFalse("NaN  <  NaN");
+shouldBeFalse("p5  <=  NaN");
+shouldBeFalse("NaN  <= NaN");
+
+
+shouldBeFalse("if ( 0 <    NaN) true; else false;");
+shouldBeFalse("if ( NaN <  NaN) true; else false;");
+shouldBeFalse("if ( 0 <=   NaN) true; else false;");
+shouldBeFalse("if ( NaN <= NaN) true; else false;");
+shouldBeFalse("if ( 0.5 <  NaN) true; else false;");
+shouldBeFalse("if ( NaN <  NaN) true; else false;");
+shouldBeFalse("if ( 0.5 <= NaN) true; else false;");
+shouldBeFalse("if ( NaN <= NaN) true; else false;");
+shouldBeFalse("if ( zero < NaN) true; else false;");
+shouldBeFalse("if (zero <= NaN) true; else false;");
+shouldBeFalse("if ( NaN <= NaN) true; else false;");
+shouldBeFalse("if ( p5  <  NaN) true; else false;");
+shouldBeFalse("if (NaN  <  NaN) true; else false;");
+shouldBeFalse("if (p5  <=  NaN) true; else false;");
+shouldBeFalse("if (NaN  <= NaN) true; else false;");
diff --git a/test/webkit/comparison-operators.js b/test/webkit/comparison-operators.js
new file mode 100644 (file)
index 0000000..4a9d240
--- /dev/null
@@ -0,0 +1,94 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("test that comparison operators work correctly.")
+
+function makeTest(start, end, expression, relationship, override, invert) {
+    var resultValue = eval(relationship + expression + 0) || !!override;
+    if (invert)
+        resultValue = !resultValue;
+    var expr = start + expression + end;
+    var result = [];
+    function func(content) { var f = new Function(content); f.toString = function(){ return content}; return f; }
+    result.push([new func("return " + expr + ";"), resultValue]);
+    result.push([new func("if (" + expr + ") return true; return false;"), resultValue]);
+    result.push([new func("var k = 0; while (" + expr + ") if (k++) return true; return false;"), resultValue]);
+    result.push([new func("var k = 0; for (; " + expr + "; ) if (k++) return true; return false;"), resultValue]);
+    return result;
+}
+function doTest(lhs, rhs, relationship) {
+    var expressionParts = [["(",")"],["(", ") || 1", true],["(", ") && 1"],["(", ") || 1", true],["1 || (",")", true],["1 && (",")"]];
+    var expressions = [];
+    var tests = [];
+    for (var i = 0; i < expressionParts.length; i++) {
+        var start = expressionParts[i][0] + lhs;
+        var end = String(rhs) + expressionParts[i][1];
+        tests.push.apply(tests, makeTest(start, end, "==", relationship, expressionParts[i][2]));
+        tests.push.apply(tests, makeTest(start, end, "!=", relationship, expressionParts[i][2]));
+        tests.push.apply(tests, makeTest(start, end, "===", relationship, expressionParts[i][2]));
+        tests.push.apply(tests, makeTest(start, end, "!==", relationship, expressionParts[i][2]));
+    }
+    for (var i = 0; i < tests.length; i++) {
+        if ((r=tests[i][0]()) == tests[i][1])
+            testPassed(tests[i][0] + " is " + tests[i][1]);
+        else
+            testFailed(tests[i][0] + " is " + r + " and should be " + tests[i][1] + ".");
+    }
+}
+
+var letterA = "a";
+var letterB = "b";
+var One = 1;
+var Zero = 0;
+doTest('"a"', '"b"', -1);
+doTest('"a"', '"a"', 0);
+doTest('"b"', '"a"', 1);
+doTest('letterA', '"b"', -1);
+doTest('letterA', '"a"', 0);
+doTest('"b"', '"a"', 1);
+doTest('letterA', '"b"', -1);
+doTest('letterA', 'letterA', 0);
+doTest('"b"', 'letterA', 1);
+doTest('"a"', '"b"', -1);
+doTest('"a"', 'letterA', 0);
+doTest('"b"', 'letterA', 1);
+
+doTest('"a"', '0', NaN);
+doTest('0', '"a"', NaN);
+doTest('letterA', '0', NaN);
+doTest('letterA', '"a"', 0);
+doTest('0', '"a"', NaN);
+doTest('letterA', 'letterA', 0);
+doTest('0', 'letterA', NaN);
+doTest('"a"', 'letterA', 0);
+doTest('0', 'letterA', NaN);
+
+
+doTest('0', '1', -1);
+doTest('0', '0', 0);
+doTest('1', '0', 1);
+doTest('Zero', '1', -1);
+doTest('Zero', '0', 0);
+doTest('1', 'Zero', 1);
+doTest('0', 'One', -1);
+doTest('One', '0', 1);
diff --git a/test/webkit/const-without-initializer-expected.txt b/test/webkit/const-without-initializer-expected.txt
new file mode 100644 (file)
index 0000000..30ff8ef
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that declaring a const variable without initializing has the correct behavior and does not crash
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS f is undefined
+PASS f is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/const-without-initializer.js b/test/webkit/const-without-initializer.js
new file mode 100644 (file)
index 0000000..9eb0365
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests that declaring a const variable without initializing has the correct behavior and does not crash'
+);
+
+const f;
+
+shouldBe('f', 'undefined');
+
+f = 10;
+
+shouldBe('f', 'undefined');
diff --git a/test/webkit/constant-count-expected.txt b/test/webkit/constant-count-expected.txt
new file mode 100644 (file)
index 0000000..dde9347
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks exceptional cases for constant counting in the parser.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS a is undefined
+PASS f() is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/constant-count.js b/test/webkit/constant-count.js
new file mode 100644 (file)
index 0000000..7bc67e7
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks exceptional cases for constant counting in the parser."
+);
+
+const a;
+const b;
+--a;
+--b;
+
+shouldBe("a", "undefined");
+
+function f()
+{
+    const a;
+    const b;
+    --a;
+    --b;
+
+    return a;
+}
+
+shouldBe("f()", "undefined");
diff --git a/test/webkit/constant-encoding-expected.txt b/test/webkit/constant-encoding-expected.txt
new file mode 100644 (file)
index 0000000..42ba9a4
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test that we correctly encode patterned immediate values
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 0 >= 0x01000100 is false
+PASS 0 >= 0x01010000 is false
+PASS 0 >= 0x00000101 is false
+PASS 0 >= 0x00010001 is false
+PASS 0 >= 0x01010101 is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/constant-encoding.js b/test/webkit/constant-encoding.js
new file mode 100644 (file)
index 0000000..d0a4c8e
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test that we correctly encode patterned immediate values");
+
+shouldBeFalse("0 >= 0x01000100")
+shouldBeFalse("0 >= 0x01010000")
+shouldBeFalse("0 >= 0x00000101")
+shouldBeFalse("0 >= 0x00010001")
+shouldBeFalse("0 >= 0x01010101")
diff --git a/test/webkit/constant-folding-expected.txt b/test/webkit/constant-folding-expected.txt
new file mode 100644 (file)
index 0000000..f1fecde
--- /dev/null
@@ -0,0 +1,467 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks some cases that might be affected by constant folding.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "abc" + "2.1" is "abc2.1"
+PASS "123" + "2.1" is "1232.1"
+PASS "123" + "=" is "123="
+PASS "*" + "123" is "*123"
+PASS !"abc" is false
+PASS !"" is true
+PASS 10.3 + 2.1 is 12.4
+PASS 10.3 + "2.1" is "10.32.1"
+PASS "10.3" + 2.1  is "10.32.1"
+PASS "10.3" + "2.1" is "10.32.1"
+PASS 10.3 + true is 11.3
+PASS "10.3" + true is "10.3true"
+PASS 10.3 + false is 10.3
+PASS "10.3" + false is "10.3false"
+PASS true + 2.1 is 3.1
+PASS true + "2.1" is "true2.1"
+PASS false + 2.1 is 2.1
+PASS false + "2.1" is "false2.1"
+PASS 10.3 - 2.1 is 8.200000000000001
+PASS 10.3 - "2.1" is 8.200000000000001
+PASS "10.3" - 2.1  is 8.200000000000001
+PASS "10.3" - "2.1" is 8.200000000000001
+PASS 10.3 - true is 9.3
+PASS "10.3" - true is 9.3
+PASS 10.3 - false is 10.3
+PASS "10.3" - false is 10.3
+PASS true - 2.1 is -1.1
+PASS true - "2.1" is -1.1
+PASS false - 2.1 is -2.1
+PASS false - "2.1" is -2.1
+PASS 10.3 * 2.1 is 21.630000000000003
+PASS 10.3 * "2.1" is 21.630000000000003
+PASS "10.3" * 2.1 is 21.630000000000003
+PASS "10.3" * "2.1" is 21.630000000000003
+PASS 10.3 * true is 10.3
+PASS "10.3" * true is 10.3
+PASS 10.3 * false is 0
+PASS "10.3" * false is 0
+PASS true * 10.3 is 10.3
+PASS true * "10.3" is 10.3
+PASS false * 10.3 is 0
+PASS false * "10.3" is 0
+PASS 10.3 / 2 is 5.15
+PASS "10.3" / 2 is 5.15
+PASS 10.3 / "2" is 5.15
+PASS "10.3" / "2" is 5.15
+PASS 10.3 / true is 10.3
+PASS "10.3" / true is 10.3
+PASS true / 2 is 0.5
+PASS true / "2" is 0.5
+PASS false / 2 is 0
+PASS false / "2" is 0
+PASS 10.3 % 2.1 is 1.9000000000000004
+PASS "10.3" % 2.1 is 1.9000000000000004
+PASS 10.3 % "2.1" is 1.9000000000000004
+PASS "10.3" % "2.1" is 1.9000000000000004
+PASS 10.3 % true is 0.3000000000000007
+PASS "10.3" % true is 0.3000000000000007
+PASS true % 2 is 1
+PASS true % "2" is 1
+PASS false % 2 is 0
+PASS false % "2" is 0
+PASS 10.3 << 2.1 is 40
+PASS "10.3" << 2.1 is 40
+PASS 10.3 << "2.1" is 40
+PASS "10.3" << "2.1" is 40
+PASS 10.3 << true is 20
+PASS "10.3" << true is 20
+PASS 10.3 << false is 10
+PASS "10.3" << false is 10
+PASS true << 2.1 is 4
+PASS true << "2.1" is 4
+PASS false << 2.1 is 0
+PASS false << "2.1" is 0
+PASS 10.3 >> 2.1 is 2
+PASS "10.3" >> 2.1 is 2
+PASS 10.3 >> "2.1" is 2
+PASS "10.3" >> "2.1" is 2
+PASS 10.3 >> true is 5
+PASS "10.3" >> true is 5
+PASS 10.3 >> false is 10
+PASS "10.3" >> false is 10
+PASS true >> 2.1 is 0
+PASS true >> "2.1" is 0
+PASS false >> 2.1 is 0
+PASS false >> "2.1" is 0
+PASS -10.3 >>> 2.1 is 1073741821
+PASS "-10.3">>> 2.1 is 1073741821
+PASS -10.3 >>> "2.1" is 1073741821
+PASS "-10.3">>> "2.1" is 1073741821
+PASS -10.3 >>> true is 2147483643
+PASS "-10.3">>> true is 2147483643
+PASS -10.3 >>> false is 4294967286
+PASS "-10.3" >>> false is 4294967286
+PASS true >>> 2.1 is 0
+PASS true >>> "2.1" is 0
+PASS false >>> 2.1 is 0
+PASS false >>> "2.1" is 0
+PASS 10.3 & 3.1 is 2
+PASS "10.3" & 3.1 is 2
+PASS 10.3 & "3.1" is 2
+PASS "10.3" & "3.1" is 2
+PASS 10.3 & true is 0
+PASS "10.3" & true is 0
+PASS 11.3 & true is 1
+PASS "11.3" & true is 1
+PASS 10.3 & false is 0
+PASS "10.3" & false is 0
+PASS 11.3 & false is 0
+PASS "11.3" & false is 0
+PASS true & 3.1 is 1
+PASS true & "3.1" is 1
+PASS true & 2.1 is 0
+PASS true & "2.1" is 0
+PASS false & 3.1 is 0
+PASS false & "3.1" is 0
+PASS false & 2.1 is 0
+PASS false & "2.1" is 0
+PASS 10.3 | 3.1 is 11
+PASS "10.3" | 3.1 is 11
+PASS 10.3 | "3.1" is 11
+PASS "10.3" | "3.1" is 11
+PASS 10.3 | true is 11
+PASS "10.3" | true is 11
+PASS 11.3 | true is 11
+PASS "11.3" | true is 11
+PASS 10.3 | false is 10
+PASS "10.3" | false is 10
+PASS 11.3 | false is 11
+PASS "11.3" | false is 11
+PASS true | 3.1 is 3
+PASS true | "3.1" is 3
+PASS true | 2.1 is 3
+PASS true | "2.1" is 3
+PASS false | 3.1 is 3
+PASS false | "3.1" is 3
+PASS false | 2.1 is 2
+PASS false | "2.1" is 2
+PASS 10.3 ^ 3.1 is 9
+PASS "10.3" ^ 3.1 is 9
+PASS 10.3 ^ "3.1" is 9
+PASS "10.3" ^ "3.1" is 9
+PASS 10.3 ^ true is 11
+PASS "10.3" ^ true is 11
+PASS 11.3 ^ true is 10
+PASS "11.3" ^ true is 10
+PASS 10.3 ^ false is 10
+PASS "10.3" ^ false is 10
+PASS 11.3 ^ false is 11
+PASS "11.3" ^ false is 11
+PASS true ^ 3.1 is 2
+PASS true ^ "3.1" is 2
+PASS true ^ 2.1 is 3
+PASS true ^ "2.1" is 3
+PASS false ^ 3.1 is 3
+PASS false ^ "3.1" is 3
+PASS false ^ 2.1 is 2
+PASS false ^ "2.1" is 2
+PASS 10.3 == 3.1 is false
+PASS 3.1 == 3.1 is true
+PASS "10.3" == 3.1 is false
+PASS "3.1" == 3.1 is true
+PASS 10.3 == "3.1" is false
+PASS 3.1 == "3.1" is true
+PASS "10.3" == "3.1" is false
+PASS "3.1" == "3.1" is true
+PASS 10.3 == true is false
+PASS 1 == true is true
+PASS "10.3" == true is false
+PASS "1" == true is true
+PASS 10.3 == false is false
+PASS 0 == false is true
+PASS "10.3" == false is false
+PASS "0" == false is true
+PASS true == 3.1 is false
+PASS true == 1 is true
+PASS true == "3.1" is false
+PASS true == "1"  is true
+PASS false == 3.1 is false
+PASS false == 0 is true
+PASS false == "3.1" is false
+PASS false == "0" is true
+PASS true == true is true
+PASS false == true is false
+PASS true == false is false
+PASS false == false is true
+PASS 10.3 != 3.1 is true
+PASS 3.1 != 3.1 is false
+PASS "10.3" != 3.1 is true
+PASS "3.1" != 3.1 is false
+PASS 10.3 != "3.1" is true
+PASS 3.1 != "3.1" is false
+PASS "10.3" != "3.1" is true
+PASS "3.1" != "3.1" is false
+PASS 10.3 != true is true
+PASS 1 != true is false
+PASS "10.3" != true is true
+PASS "1" != true is false
+PASS 10.3 != false is true
+PASS 0 != false is false
+PASS "10.3" != false is true
+PASS "0" != false is false
+PASS true != 3.1 is true
+PASS true != 1 is false
+PASS true != "3.1" is true
+PASS true != "1"  is false
+PASS false != 3.1 is true
+PASS false != 0 is false
+PASS false != "3.1" is true
+PASS false != "0" is false
+PASS true != true is false
+PASS false != true is true
+PASS true != false is true
+PASS false != false is false
+PASS 10.3 > 3.1 is true
+PASS 3.1 > 3.1 is false
+PASS "10.3" > 3.1 is true
+PASS "3.1" > 3.1 is false
+PASS 10.3 > "3.1" is true
+PASS 3.1 > "3.1" is false
+PASS "10.3" > "3.1" is false
+PASS "3.1" > "3.1" is false
+PASS 10.3 > true is true
+PASS 0 > true is false
+PASS "10.3" > true is true
+PASS "0" > true is false
+PASS 10.3 > false is true
+PASS -1 > false is false
+PASS "10.3" > false is true
+PASS "-1" > false is false
+PASS true > 0.1 is true
+PASS true > 1.1 is false
+PASS true > "0.1" is true
+PASS true > "1.1" is false
+PASS false > -3.1 is true
+PASS false > 0 is false
+PASS false > "-3.1" is true
+PASS false > "0" is false
+PASS true > true is false
+PASS false > true is false
+PASS true > false is true
+PASS false > false is false
+PASS 10.3 < 3.1 is false
+PASS 2.1 < 3.1 is true
+PASS "10.3" < 3.1 is false
+PASS "2.1" < 3.1 is true
+PASS 10.3 < "3.1" is false
+PASS 2.1 < "3.1" is true
+PASS "10.3" < "3.1" is true
+PASS "2.1" < "3.1" is true
+PASS 10.3 < true is false
+PASS 0 < true is true
+PASS "10.3" < true is false
+PASS "0" < true is true
+PASS 10.3 < false is false
+PASS -1 < false is true
+PASS "10.3" < false is false
+PASS "-1" < false is true
+PASS true < 0.1 is false
+PASS true < 1.1 is true
+PASS true < "0.1" is false
+PASS true < "1.1" is true
+PASS false < -3.1 is false
+PASS false < 0.1 is true
+PASS false < "-3.1" is false
+PASS false < "0.1" is true
+PASS true < true is false
+PASS false < true is true
+PASS true < false is false
+PASS false < false is false
+PASS 10.3 >= 3.1 is true
+PASS 2.1 >= 3.1 is false
+PASS "10.3" >= 3.1 is true
+PASS "2.1" >= 3.1 is false
+PASS 10.3 >= "3.1" is true
+PASS 2.1 >= "3.1" is false
+PASS "10.3" >= "3.1" is false
+PASS "2.1" >= "3.1" is false
+PASS 10.3 >= true is true
+PASS 0 >= true is false
+PASS "10.3" >= true is true
+PASS "0" >= true is false
+PASS 10.3 >= false is true
+PASS -1 >= false is false
+PASS "10.3" >= false is true
+PASS "-1" >= false is false
+PASS true >= 0.1 is true
+PASS true >= 1.1 is false
+PASS true >= "0.1" is true
+PASS true >= "1.1" is false
+PASS false >= -3.1 is true
+PASS false >= 0 is true
+PASS false >= "-3.1" is true
+PASS false >= "0" is true
+PASS true >= true is true
+PASS false >= true is false
+PASS true >= false is true
+PASS false >= false is true
+PASS 10.3 <= 3.1 is false
+PASS 2.1 <= 3.1 is true
+PASS "10.3" <= 3.1 is false
+PASS "2.1" <= 3.1 is true
+PASS 10.3 <= "3.1" is false
+PASS 2.1 <= "3.1" is true
+PASS "10.3" <= "3.1" is true
+PASS "2.1" <= "3.1" is true
+PASS 10.3 <= true is false
+PASS 0 <= true is true
+PASS "10.3" <= true is false
+PASS "0" <= true is true
+PASS 10.3 <= false is false
+PASS -1 <= false is true
+PASS "10.3" <= false is false
+PASS "-1" <= false is true
+PASS true <= 0.1 is false
+PASS true <= 1.1 is true
+PASS true <= "0.1" is false
+PASS true <= "1.1" is true
+PASS false <= -3.1 is false
+PASS false <= 0.1 is true
+PASS false <= "-3.1" is false
+PASS false <= "0.1" is true
+PASS true <= true is true
+PASS false <= true is true
+PASS true <= false is false
+PASS false <= false is true
+PASS true && true is true
+PASS true && false is false
+PASS false && true is false
+PASS false && false is false
+PASS 1.1 && true is true
+PASS 1.1 && false is false
+PASS 0 && true is 0
+PASS 0 && false is 0
+PASS "1.1" && true is true
+PASS "1.1" && false is false
+PASS "0" && true is true
+PASS "0" && false is false
+PASS true && 1.1 is 1.1
+PASS true && 0 is 0
+PASS false && 1.1 is false
+PASS false && 0 is false
+PASS true && "1.1" is "1.1"
+PASS true && "0" is "0"
+PASS false && "1.1" is false
+PASS false && "0" is false
+PASS 1.1 && 1.1 is 1.1
+PASS 1.1 && 0 is 0
+PASS 0 && 1.1 is 0
+PASS 0 && 0 is 0
+PASS "1.1" && 1.1 is 1.1
+PASS "1.1" && 0 is 0
+PASS "0" && 1.1 is 1.1
+PASS "0" && 0 is 0
+PASS 1.1 && "1.1" is "1.1"
+PASS 1.1 && "0" is "0"
+PASS 0 && "1.1" is 0
+PASS 0 && "0" is 0
+PASS "1.1" && "1.1" is "1.1"
+PASS "1.1" && "0" is "0"
+PASS "0" && "1.1" is "1.1"
+PASS "0" && "0" is "0"
+PASS true || true is true
+PASS true || false is true
+PASS false || true is true
+PASS false || false is false
+PASS 1.1 || true is 1.1
+PASS 1.1 || false is 1.1
+PASS 0 || true is true
+PASS 0 || false is false
+PASS "1.1" || true is "1.1"
+PASS "1.1" || false is "1.1"
+PASS "0" || true is "0"
+PASS "0" || false is "0"
+PASS true || 1.1 is true
+PASS true || 0 is true
+PASS false || 1.1 is 1.1
+PASS false || 0 is 0
+PASS true || "1.1" is true
+PASS true || "0" is true
+PASS false || "1.1" is "1.1"
+PASS false || "0" is "0"
+PASS 1.1 || 1.1 is 1.1
+PASS 1.1 || 0 is 1.1
+PASS 0 || 1.1 is 1.1
+PASS 0 || 0 is 0
+PASS "1.1" || 1.1 is "1.1"
+PASS "1.1" || 0 is "1.1"
+PASS "0" || 1.1 is "0"
+PASS "0" || 0 is "0"
+PASS 1.1 || "1.1" is 1.1
+PASS 1.1 || "0" is 1.1
+PASS 0 || "1.1" is "1.1"
+PASS 0 || "0" is "0"
+PASS "1.1" || "1.1" is "1.1"
+PASS "1.1" || "0" is "1.1"
+PASS "0" || "1.1" is "0"
+PASS "0" || "0" is "0"
+PASS +3.1 is 3.1
+PASS + +3.1 is 3.1
+PASS +"3.1" is 3.1
+PASS +true is 1
+PASS +false is 0
+PASS -3.1 is -3.1
+PASS - -3.1 is 3.1
+PASS -"3.1" is -3.1
+PASS -true is -1
+PASS -false is -0
+PASS ~3 is -4
+PASS ~ ~3 is 3
+PASS ~"3" is -4
+PASS ~true is -2
+PASS ~false is -1
+PASS !true is false
+PASS !false is true
+PASS !3 is false
+PASS !0 is true
+PASS 10.3 / 0 is Infinity
+PASS "10.3" / 0 is Infinity
+PASS -10.3 / 0 is -Infinity
+PASS "-10.3" / 0 is -Infinity
+PASS true / 0 is Infinity
+PASS false / 0 is NaN
+PASS 0 / 0 is NaN
+PASS 10.3 / -0 is -Infinity
+PASS "10.3" / -0 is -Infinity
+PASS -10.3 / -0 is Infinity
+PASS "-10.3" / -0 is Infinity
+PASS true / -0 is -Infinity
+PASS false / -0 is NaN
+PASS 0 / -0 is NaN
+PASS 1 / -0 is -Infinity
+PASS 1 / - 0 is -Infinity
+PASS 1 / - -0 is Infinity
+PASS 1 / - - -0 is -Infinity
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/constant-folding.js b/test/webkit/constant-folding.js
new file mode 100644 (file)
index 0000000..a348eea
--- /dev/null
@@ -0,0 +1,491 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks some cases that might be affected by constant folding."
+);
+
+shouldBe('"abc" + "2.1"', '"abc2.1"');
+shouldBe('"123" + "2.1"', '"1232.1"');
+shouldBe('"123" + "="', '"123="');
+shouldBe('"*" + "123"', '"*123"');
+
+shouldBe('!"abc"', 'false');
+shouldBe('!""', 'true');
+
+shouldBe('10.3 + 2.1', '12.4');
+shouldBe('10.3 + "2.1"', '"10.32.1"');
+shouldBe('"10.3" + 2.1 ', '"10.32.1"');
+shouldBe('"10.3" + "2.1"', '"10.32.1"');
+shouldBe('10.3 + true', '11.3');
+shouldBe('"10.3" + true', '"10.3true"');
+shouldBe('10.3 + false', '10.3');
+shouldBe('"10.3" + false', '"10.3false"');
+shouldBe('true + 2.1', '3.1');
+shouldBe('true + "2.1"', '"true2.1"');
+shouldBe('false + 2.1', '2.1');
+shouldBe('false + "2.1"', '"false2.1"');
+
+shouldBe('10.3 - 2.1', '8.200000000000001');
+shouldBe('10.3 - "2.1"', '8.200000000000001');
+shouldBe('"10.3" - 2.1 ', '8.200000000000001');
+shouldBe('"10.3" - "2.1"', '8.200000000000001');
+shouldBe('10.3 - true', '9.3');
+shouldBe('"10.3" - true', '9.3');
+shouldBe('10.3 - false', '10.3');
+shouldBe('"10.3" - false', '10.3');
+shouldBe('true - 2.1', '-1.1');
+shouldBe('true - "2.1"', '-1.1');
+shouldBe('false - 2.1', '-2.1');
+shouldBe('false - "2.1"', '-2.1');
+
+shouldBe('10.3 * 2.1', '21.630000000000003');
+shouldBe('10.3 * "2.1"', '21.630000000000003');
+shouldBe('"10.3" * 2.1', '21.630000000000003');
+shouldBe('"10.3" * "2.1"', '21.630000000000003');
+shouldBe('10.3 * true', '10.3');
+shouldBe('"10.3" * true', '10.3');
+shouldBe('10.3 * false', '0');
+shouldBe('"10.3" * false', '0');
+shouldBe('true * 10.3', '10.3');
+shouldBe('true * "10.3"', '10.3');
+shouldBe('false * 10.3', '0');
+shouldBe('false * "10.3"', '0');
+
+shouldBe('10.3 / 2', '5.15');
+shouldBe('"10.3" / 2', '5.15');
+shouldBe('10.3 / "2"', '5.15');
+shouldBe('"10.3" / "2"', '5.15');
+shouldBe('10.3 / true', '10.3');
+shouldBe('"10.3" / true', '10.3');
+shouldBe('true / 2', '0.5');
+shouldBe('true / "2"', '0.5');
+shouldBe('false / 2', '0');
+shouldBe('false / "2"', '0');
+
+shouldBe('10.3 % 2.1', '1.9000000000000004');
+shouldBe('"10.3" % 2.1', '1.9000000000000004');
+shouldBe('10.3 % "2.1"', '1.9000000000000004');
+shouldBe('"10.3" % "2.1"', '1.9000000000000004');
+shouldBe('10.3 % true', '0.3000000000000007');
+shouldBe('"10.3" % true', '0.3000000000000007');
+shouldBe('true % 2', '1');
+shouldBe('true % "2"', '1');
+shouldBe('false % 2', '0');
+shouldBe('false % "2"', '0');
+
+shouldBe('10.3 << 2.1', '40');
+shouldBe('"10.3" << 2.1', '40');
+shouldBe('10.3 << "2.1"', '40');
+shouldBe('"10.3" << "2.1"', '40');
+shouldBe('10.3 << true', '20');
+shouldBe('"10.3" << true', '20');
+shouldBe('10.3 << false', '10');
+shouldBe('"10.3" << false', '10');
+shouldBe('true << 2.1', '4');
+shouldBe('true << "2.1"', '4');
+shouldBe('false << 2.1', '0');
+shouldBe('false << "2.1"', '0');
+
+shouldBe('10.3 >> 2.1', '2');
+shouldBe('"10.3" >> 2.1', '2');
+shouldBe('10.3 >> "2.1"', '2');
+shouldBe('"10.3" >> "2.1"', '2');
+shouldBe('10.3 >> true', '5');
+shouldBe('"10.3" >> true', '5');
+shouldBe('10.3 >> false', '10');
+shouldBe('"10.3" >> false', '10');
+shouldBe('true >> 2.1', '0');
+shouldBe('true >> "2.1"', '0');
+shouldBe('false >> 2.1', '0');
+shouldBe('false >> "2.1"', '0');
+
+shouldBe('-10.3 >>> 2.1', '1073741821');
+shouldBe('"-10.3">>> 2.1', '1073741821');
+shouldBe('-10.3 >>> "2.1"', '1073741821');
+shouldBe('"-10.3">>> "2.1"', '1073741821');
+shouldBe('-10.3 >>> true', '2147483643');
+shouldBe('"-10.3">>> true', '2147483643');
+shouldBe('-10.3 >>> false', '4294967286');
+shouldBe('"-10.3" >>> false', '4294967286');
+shouldBe('true >>> 2.1', '0');
+shouldBe('true >>> "2.1"', '0');
+shouldBe('false >>> 2.1', '0');
+shouldBe('false >>> "2.1"', '0');
+
+
+shouldBe('10.3 & 3.1', '2');
+shouldBe('"10.3" & 3.1', '2');
+shouldBe('10.3 & "3.1"', '2');
+shouldBe('"10.3" & "3.1"', '2');
+shouldBe('10.3 & true', '0');
+shouldBe('"10.3" & true', '0');
+shouldBe('11.3 & true', '1');
+shouldBe('"11.3" & true', '1');
+shouldBe('10.3 & false', '0');
+shouldBe('"10.3" & false', '0');
+shouldBe('11.3 & false', '0');
+shouldBe('"11.3" & false', '0');
+shouldBe('true & 3.1', '1');
+shouldBe('true & "3.1"', '1');
+shouldBe('true & 2.1', '0');
+shouldBe('true & "2.1"', '0');
+shouldBe('false & 3.1', '0');
+shouldBe('false & "3.1"', '0');
+shouldBe('false & 2.1', '0');
+shouldBe('false & "2.1"', '0');
+
+
+shouldBe('10.3 | 3.1', '11');
+shouldBe('"10.3" | 3.1', '11');
+shouldBe('10.3 | "3.1"', '11');
+shouldBe('"10.3" | "3.1"', '11');
+shouldBe('10.3 | true', '11');
+shouldBe('"10.3" | true', '11');
+shouldBe('11.3 | true', '11');
+shouldBe('"11.3" | true', '11');
+shouldBe('10.3 | false', '10');
+shouldBe('"10.3" | false', '10');
+shouldBe('11.3 | false', '11');
+shouldBe('"11.3" | false', '11');
+shouldBe('true | 3.1', '3');
+shouldBe('true | "3.1"', '3');
+shouldBe('true | 2.1', '3');
+shouldBe('true | "2.1"', '3');
+shouldBe('false | 3.1', '3');
+shouldBe('false | "3.1"', '3');
+shouldBe('false | 2.1', '2');
+shouldBe('false | "2.1"', '2');
+
+shouldBe('10.3 ^ 3.1', '9');
+shouldBe('"10.3" ^ 3.1', '9');
+shouldBe('10.3 ^ "3.1"', '9');
+shouldBe('"10.3" ^ "3.1"', '9');
+shouldBe('10.3 ^ true', '11');
+shouldBe('"10.3" ^ true', '11');
+shouldBe('11.3 ^ true', '10');
+shouldBe('"11.3" ^ true', '10');
+shouldBe('10.3 ^ false', '10');
+shouldBe('"10.3" ^ false', '10');
+shouldBe('11.3 ^ false', '11');
+shouldBe('"11.3" ^ false', '11');
+shouldBe('true ^ 3.1', '2');
+shouldBe('true ^ "3.1"', '2');
+shouldBe('true ^ 2.1', '3');
+shouldBe('true ^ "2.1"', '3');
+shouldBe('false ^ 3.1', '3');
+shouldBe('false ^ "3.1"', '3');
+shouldBe('false ^ 2.1', '2');
+shouldBe('false ^ "2.1"', '2');
+
+shouldBe('10.3 == 3.1', 'false');
+shouldBe('3.1 == 3.1', 'true');
+shouldBe('"10.3" == 3.1', 'false');
+shouldBe('"3.1" == 3.1', 'true');
+shouldBe('10.3 == "3.1"', 'false');
+shouldBe('3.1 == "3.1"', 'true');
+shouldBe('"10.3" == "3.1"', 'false');
+shouldBe('"3.1" == "3.1"', 'true');
+shouldBe('10.3 == true', 'false');
+shouldBe('1 == true', 'true');
+shouldBe('"10.3" == true', 'false');
+shouldBe('"1" == true', 'true');
+shouldBe('10.3 == false', 'false');
+shouldBe('0 == false', 'true');
+shouldBe('"10.3" == false', 'false');
+shouldBe('"0" == false', 'true');
+shouldBe('true == 3.1', 'false');
+shouldBe('true == 1', 'true');
+shouldBe('true == "3.1"', 'false');
+shouldBe('true == "1" ', 'true');
+shouldBe('false == 3.1', 'false');
+shouldBe('false == 0', 'true');
+shouldBe('false == "3.1"', 'false');
+shouldBe('false == "0"', 'true');
+shouldBe('true == true', 'true');
+shouldBe('false == true', 'false');
+shouldBe('true == false', 'false');
+shouldBe('false == false', 'true');
+
+shouldBe('10.3 != 3.1', 'true');
+shouldBe('3.1 != 3.1', 'false');
+shouldBe('"10.3" != 3.1', 'true');
+shouldBe('"3.1" != 3.1', 'false');
+shouldBe('10.3 != "3.1"', 'true');
+shouldBe('3.1 != "3.1"', 'false');
+shouldBe('"10.3" != "3.1"', 'true');
+shouldBe('"3.1" != "3.1"', 'false');
+shouldBe('10.3 != true', 'true');
+shouldBe('1 != true', 'false');
+shouldBe('"10.3" != true', 'true');
+shouldBe('"1" != true', 'false');
+shouldBe('10.3 != false', 'true');
+shouldBe('0 != false', 'false');
+shouldBe('"10.3" != false', 'true');
+shouldBe('"0" != false', 'false');
+shouldBe('true != 3.1', 'true');
+shouldBe('true != 1', 'false');
+shouldBe('true != "3.1"', 'true');
+shouldBe('true != "1" ', 'false');
+shouldBe('false != 3.1', 'true');
+shouldBe('false != 0', 'false');
+shouldBe('false != "3.1"', 'true');
+shouldBe('false != "0"', 'false');
+shouldBe('true != true', 'false');
+shouldBe('false != true', 'true');
+shouldBe('true != false', 'true');
+shouldBe('false != false', 'false');
+
+shouldBe('10.3 > 3.1', 'true');
+shouldBe('3.1 > 3.1', 'false');
+shouldBe('"10.3" > 3.1', 'true');
+shouldBe('"3.1" > 3.1', 'false');
+shouldBe('10.3 > "3.1"', 'true');
+shouldBe('3.1 > "3.1"', 'false');
+shouldBe('"10.3" > "3.1"', 'false');
+shouldBe('"3.1" > "3.1"', 'false');
+shouldBe('10.3 > true', 'true');
+shouldBe('0 > true', 'false');
+shouldBe('"10.3" > true', 'true');
+shouldBe('"0" > true', 'false');
+shouldBe('10.3 > false', 'true');
+shouldBe('-1 > false', 'false');
+shouldBe('"10.3" > false', 'true');
+shouldBe('"-1" > false', 'false');
+shouldBe('true > 0.1', 'true');
+shouldBe('true > 1.1', 'false');
+shouldBe('true > "0.1"', 'true');
+shouldBe('true > "1.1"', 'false');
+shouldBe('false > -3.1', 'true');
+shouldBe('false > 0', 'false');
+shouldBe('false > "-3.1"', 'true');
+shouldBe('false > "0"', 'false');
+shouldBe('true > true', 'false');
+shouldBe('false > true', 'false');
+shouldBe('true > false', 'true');
+shouldBe('false > false', 'false');
+
+shouldBe('10.3 < 3.1', 'false');
+shouldBe('2.1 < 3.1', 'true');
+shouldBe('"10.3" < 3.1', 'false');
+shouldBe('"2.1" < 3.1', 'true');
+shouldBe('10.3 < "3.1"', 'false');
+shouldBe('2.1 < "3.1"', 'true');
+shouldBe('"10.3" < "3.1"', 'true');
+shouldBe('"2.1" < "3.1"', 'true');
+shouldBe('10.3 < true', 'false');
+shouldBe('0 < true', 'true');
+shouldBe('"10.3" < true', 'false');
+shouldBe('"0" < true', 'true');
+shouldBe('10.3 < false', 'false');
+shouldBe('-1 < false', 'true');
+shouldBe('"10.3" < false', 'false');
+shouldBe('"-1" < false', 'true');
+shouldBe('true < 0.1', 'false');
+shouldBe('true < 1.1', 'true');
+shouldBe('true < "0.1"', 'false');
+shouldBe('true < "1.1"', 'true');
+shouldBe('false < -3.1', 'false');
+shouldBe('false < 0.1', 'true');
+shouldBe('false < "-3.1"', 'false');
+shouldBe('false < "0.1"', 'true');
+shouldBe('true < true', 'false');
+shouldBe('false < true', 'true');
+shouldBe('true < false', 'false');
+shouldBe('false < false', 'false');
+
+shouldBe('10.3 >= 3.1', 'true');
+shouldBe('2.1 >= 3.1', 'false');
+shouldBe('"10.3" >= 3.1', 'true');
+shouldBe('"2.1" >= 3.1', 'false');
+shouldBe('10.3 >= "3.1"', 'true');
+shouldBe('2.1 >= "3.1"', 'false');
+shouldBe('"10.3" >= "3.1"', 'false');
+shouldBe('"2.1" >= "3.1"', 'false');
+shouldBe('10.3 >= true', 'true');
+shouldBe('0 >= true', 'false');
+shouldBe('"10.3" >= true', 'true');
+shouldBe('"0" >= true', 'false');
+shouldBe('10.3 >= false', 'true');
+shouldBe('-1 >= false', 'false');
+shouldBe('"10.3" >= false', 'true');
+shouldBe('"-1" >= false', 'false');
+shouldBe('true >= 0.1', 'true');
+shouldBe('true >= 1.1', 'false');
+shouldBe('true >= "0.1"', 'true');
+shouldBe('true >= "1.1"', 'false');
+shouldBe('false >= -3.1', 'true');
+shouldBe('false >= 0', 'true');
+shouldBe('false >= "-3.1"', 'true');
+shouldBe('false >= "0"', 'true');
+shouldBe('true >= true', 'true');
+shouldBe('false >= true', 'false');
+shouldBe('true >= false', 'true');
+shouldBe('false >= false', 'true');
+
+shouldBe('10.3 <= 3.1', 'false');
+shouldBe('2.1 <= 3.1', 'true');
+shouldBe('"10.3" <= 3.1', 'false');
+shouldBe('"2.1" <= 3.1', 'true');
+shouldBe('10.3 <= "3.1"', 'false');
+shouldBe('2.1 <= "3.1"', 'true');
+shouldBe('"10.3" <= "3.1"', 'true');
+shouldBe('"2.1" <= "3.1"', 'true');
+shouldBe('10.3 <= true', 'false');
+shouldBe('0 <= true', 'true');
+shouldBe('"10.3" <= true', 'false');
+shouldBe('"0" <= true', 'true');
+shouldBe('10.3 <= false', 'false');
+shouldBe('-1 <= false', 'true');
+shouldBe('"10.3" <= false', 'false');
+shouldBe('"-1" <= false', 'true');
+shouldBe('true <= 0.1', 'false');
+shouldBe('true <= 1.1', 'true');
+shouldBe('true <= "0.1"', 'false');
+shouldBe('true <= "1.1"', 'true');
+shouldBe('false <= -3.1', 'false');
+shouldBe('false <= 0.1', 'true');
+shouldBe('false <= "-3.1"', 'false');
+shouldBe('false <= "0.1"', 'true');
+shouldBe('true <= true', 'true');
+shouldBe('false <= true', 'true');
+shouldBe('true <= false', 'false');
+shouldBe('false <= false', 'true');
+
+shouldBe('true && true', 'true');
+shouldBe('true && false', 'false');
+shouldBe('false && true', 'false');
+shouldBe('false && false', 'false');
+shouldBe('1.1 && true', 'true');
+shouldBe('1.1 && false', 'false');
+shouldBe('0 && true', '0');
+shouldBe('0 && false', '0');
+shouldBe('"1.1" && true', 'true');
+shouldBe('"1.1" && false', 'false');
+shouldBe('"0" && true', 'true');
+shouldBe('"0" && false', 'false');
+shouldBe('true && 1.1', '1.1');
+shouldBe('true && 0', '0');
+shouldBe('false && 1.1', 'false');
+shouldBe('false && 0', 'false');
+shouldBe('true && "1.1"', '"1.1"');
+shouldBe('true && "0"', '"0"');
+shouldBe('false && "1.1"', 'false');
+shouldBe('false && "0"', 'false');
+shouldBe('1.1 && 1.1', '1.1');
+shouldBe('1.1 && 0', '0');
+shouldBe('0 && 1.1', '0');
+shouldBe('0 && 0', '0');
+shouldBe('"1.1" && 1.1', '1.1');
+shouldBe('"1.1" && 0', '0');
+shouldBe('"0" && 1.1', '1.1');
+shouldBe('"0" && 0', '0');
+shouldBe('1.1 && "1.1"', '"1.1"');
+shouldBe('1.1 && "0"', '"0"');
+shouldBe('0 && "1.1"', '0');
+shouldBe('0 && "0"', '0');
+shouldBe('"1.1" && "1.1"', '"1.1"');
+shouldBe('"1.1" && "0"', '"0"');
+shouldBe('"0" && "1.1"', '"1.1"');
+shouldBe('"0" && "0"', '"0"');
+
+shouldBe('true || true', 'true');
+shouldBe('true || false', 'true');
+shouldBe('false || true', 'true');
+shouldBe('false || false', 'false');
+shouldBe('1.1 || true', '1.1');
+shouldBe('1.1 || false', '1.1');
+shouldBe('0 || true', 'true');
+shouldBe('0 || false', 'false');
+shouldBe('"1.1" || true', '"1.1"');
+shouldBe('"1.1" || false', '"1.1"');
+shouldBe('"0" || true', '"0"');
+shouldBe('"0" || false', '"0"');
+shouldBe('true || 1.1', 'true');
+shouldBe('true || 0', 'true');
+shouldBe('false || 1.1', '1.1');
+shouldBe('false || 0', '0');
+shouldBe('true || "1.1"', 'true');
+shouldBe('true || "0"', 'true');
+shouldBe('false || "1.1"', '"1.1"');
+shouldBe('false || "0"', '"0"');
+shouldBe('1.1 || 1.1', '1.1');
+shouldBe('1.1 || 0', '1.1');
+shouldBe('0 || 1.1', '1.1');
+shouldBe('0 || 0', '0');
+shouldBe('"1.1" || 1.1', '"1.1"');
+shouldBe('"1.1" || 0', '"1.1"');
+shouldBe('"0" || 1.1', '"0"');
+shouldBe('"0" || 0', '"0"');
+shouldBe('1.1 || "1.1"', '1.1');
+shouldBe('1.1 || "0"', '1.1');
+shouldBe('0 || "1.1"', '"1.1"');
+shouldBe('0 || "0"', '"0"');
+shouldBe('"1.1" || "1.1"', '"1.1"');
+shouldBe('"1.1" || "0"', '"1.1"');
+shouldBe('"0" || "1.1"', '"0"');
+shouldBe('"0" || "0"', '"0"');
+
+shouldBe('+3.1', '3.1');
+shouldBe('+ +3.1', '3.1');
+shouldBe('+"3.1"', '3.1');
+shouldBe('+true', '1');
+shouldBe('+false', '0');
+
+shouldBe('-3.1', '-3.1');
+shouldBe('- -3.1', '3.1');
+shouldBe('-"3.1"', '-3.1');
+shouldBe('-true', '-1');
+shouldBe('-false', '-0');
+
+shouldBe('~3', '-4');
+shouldBe('~ ~3', '3');
+shouldBe('~"3"', '-4');
+shouldBe('~true', '-2');
+shouldBe('~false', '-1');
+
+shouldBe('!true', 'false');
+shouldBe('!false', 'true');
+shouldBe('!3', 'false');
+shouldBe('!0', 'true');
+
+shouldBe('10.3 / 0', 'Infinity');
+shouldBe('"10.3" / 0', 'Infinity');
+shouldBe('-10.3 / 0', '-Infinity');
+shouldBe('"-10.3" / 0', '-Infinity');
+shouldBe('true / 0', 'Infinity');
+shouldBe('false / 0', 'NaN');
+shouldBe('0 / 0', 'NaN');
+
+shouldBe('10.3 / -0', '-Infinity');
+shouldBe('"10.3" / -0', '-Infinity');
+shouldBe('-10.3 / -0', 'Infinity');
+shouldBe('"-10.3" / -0', 'Infinity');
+shouldBe('true / -0', '-Infinity');
+shouldBe('false / -0', 'NaN');
+shouldBe('0 / -0', 'NaN');
+
+shouldBe('1 / -0', '-Infinity');
+shouldBe('1 / - 0', '-Infinity');
+shouldBe('1 / - -0', 'Infinity');
+shouldBe('1 / - - -0', '-Infinity');
diff --git a/test/webkit/continue-break-multiple-labels-expected.txt b/test/webkit/continue-break-multiple-labels-expected.txt
new file mode 100644 (file)
index 0000000..bf862b9
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks break and continue behaviour in the presence of multiple labels.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test1() is '12356789'
+PASS test2() is '123'
+PASS test3() is 10
+PASS test4() is 1
+PASS test5() is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/continue-break-multiple-labels.js b/test/webkit/continue-break-multiple-labels.js
new file mode 100644 (file)
index 0000000..69d0834
--- /dev/null
@@ -0,0 +1,111 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test checks break and continue behaviour in the presence of multiple labels.'
+);
+
+function test1()
+{
+    var s = "";
+
+    a:
+    b:
+    for (var i = 1; i < 10; i++) {
+       if (i == 4)
+            continue a;
+       s += i;
+    }
+
+    return s;
+}
+
+shouldBe("test1()", "'12356789'");
+
+function test2()
+{
+    var s = "";
+
+    a:
+    b:
+    for (var i = 1; i < 10; i++) {
+        if (i == 4)
+            break a;
+        s += i;
+    }
+
+    return s;
+}
+
+shouldBe("test2()", "'123'");
+
+function test3()
+{
+    var i;
+    for (i = 1; i < 10; i++) {
+        try {
+            continue;
+        } finally {
+            innerLoop:
+            while (1) {
+                break innerLoop;
+            }
+        }
+    }
+
+    return i;
+}
+
+shouldBe("test3()", "10");
+
+function test4()
+{
+    var i = 0;
+
+    a:
+    i++;
+    while (1) {
+        break;
+    }
+
+    return i;
+}
+
+shouldBe("test4()", "1");
+
+function test5()
+{
+    var i = 0;
+
+    switch (1) {
+    default:
+        while (1) {
+            break;
+        }
+        i++;
+    }
+
+    return i;
+}
+
+shouldBe("test5()", "1");
diff --git a/test/webkit/convert-nan-to-bool-expected.txt b/test/webkit/convert-nan-to-bool-expected.txt
new file mode 100644 (file)
index 0000000..f37e3ef
--- /dev/null
@@ -0,0 +1,97 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test ensures that NaN is handled correctly when converting numeric expressions to booleans.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS NaN ? true : false is false
+PASS 1 ? true : false is true
+PASS 0 ? true : false is false
+PASS -1 ? true : false is true
+PASS 1 * -1 ? true : false is true
+PASS 1 * 0 ? true : false is false
+PASS 1 * 1 ? true : false is true
+PASS 1 / -1 ? true : false is true
+PASS 1 / 0 ? true : false is true
+PASS 1 / 1 ? true : false is true
+PASS 1 % 2 ? true : false is true
+PASS 1 % 1 ? true : false is false
+PASS 1 + -1 ? true : false is false
+PASS 1 + 0 ? true : false is true
+PASS 1 + 1 ? true : false is true
+PASS 1 - -1 ? true : false is true
+PASS 1 - 0 ? true : false is true
+PASS 1 - 1 ? true : false is false
+PASS 1 & -1 ? true : false is true
+PASS 1 & 0 ? true : false is false
+PASS 1 & 1 ? true : false is true
+PASS 1 | -1 ? true : false is true
+PASS 1 | 0 ? true : false is true
+PASS 1 | 1 ? true : false is true
+PASS 1 ^ -1 ? true : false is true
+PASS 1 ^ 0 ? true : false is true
+PASS 1 ^ 1 ? true : false is false
+PASS NaN * -1 ? true : false is false
+PASS NaN * 0? true : false is false
+PASS NaN * 1? true : false is false
+PASS NaN / -1 ? true : false is false
+PASS NaN / 0? true : false is false
+PASS NaN / 1? true : false is false
+PASS NaN % -1 ? true : false is false
+PASS NaN % 0? true : false is false
+PASS NaN % 1? true : false is false
+PASS NaN + -1 ? true : false is false
+PASS NaN + 0? true : false is false
+PASS NaN + 1? true : false is false
+PASS NaN - -1 ? true : false is false
+PASS NaN - 0? true : false is false
+PASS NaN - 1? true : false is false
+PASS NaN & -1 ? true : false is false
+PASS NaN & 0? true : false is false
+PASS NaN & 1? true : false is false
+PASS NaN | -1 ? true : false is true
+PASS NaN | 0? true : false is false
+PASS NaN | 1? true : false is true
+PASS NaN ^ -1 ? true : false is true
+PASS NaN ^ 0? true : false is false
+PASS NaN ^ 1? true : false is true
+PASS +NaN ? true : false is false
+PASS -NaN ? true : false is false
+PASS NaN && true ? true : false is false
+PASS NaN && false ? true : false is false
+PASS NaN || true ? true : false is true
+PASS NaN || false ? true : false is false
+PASS (function(){var nan = NaN; return nan-- ? true : false})() is false
+PASS (function(){var nan = NaN; return nan++ ? true : false})() is false
+PASS (function(){var nan = NaN; return --nan ? true : false})() is false
+PASS (function(){var nan = NaN; return ++nan ? true : false})() is false
+PASS (function(){var Undefined = undefined; return Undefined-- ? true : false})() is false
+PASS (function(){var Undefined = undefined; return Undefined++ ? true : false})() is false
+PASS (function(){var Undefined = undefined; return --Undefined ? true : false})() is false
+PASS (function(){var Undefined = undefined; return ++Undefined ? true : false})() is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/convert-nan-to-bool.js b/test/webkit/convert-nan-to-bool.js
new file mode 100644 (file)
index 0000000..aae679e
--- /dev/null
@@ -0,0 +1,90 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This test ensures that NaN is handled correctly when converting numeric expressions to booleans.");
+
+shouldBe("NaN ? true : false", "false");
+shouldBe("1 ? true : false", "true");
+shouldBe("0 ? true : false", "false");
+shouldBe("-1 ? true : false", "true");
+shouldBe("1 * -1 ? true : false", "true");
+shouldBe("1 * 0 ? true : false", "false");
+shouldBe("1 * 1 ? true : false", "true");
+shouldBe("1 / -1 ? true : false", "true");
+shouldBe("1 / 0 ? true : false", "true");
+shouldBe("1 / 1 ? true : false", "true");
+shouldBe("1 % 2 ? true : false", "true");
+shouldBe("1 % 1 ? true : false", "false");
+shouldBe("1 + -1 ? true : false", "false");
+shouldBe("1 + 0 ? true : false", "true");
+shouldBe("1 + 1 ? true : false", "true");
+shouldBe("1 - -1 ? true : false", "true");
+shouldBe("1 - 0 ? true : false", "true");
+shouldBe("1 - 1 ? true : false", "false");
+shouldBe("1 & -1 ? true : false", "true");
+shouldBe("1 & 0 ? true : false", "false");
+shouldBe("1 & 1 ? true : false", "true");
+shouldBe("1 | -1 ? true : false", "true");
+shouldBe("1 | 0 ? true : false", "true");
+shouldBe("1 | 1 ? true : false", "true");
+shouldBe("1 ^ -1 ? true : false", "true");
+shouldBe("1 ^ 0 ? true : false", "true");
+shouldBe("1 ^ 1 ? true : false", "false");
+shouldBe("NaN * -1 ? true : false", "false");
+shouldBe("NaN * 0? true : false", "false");
+shouldBe("NaN * 1? true : false", "false");
+shouldBe("NaN / -1 ? true : false", "false");
+shouldBe("NaN / 0? true : false", "false");
+shouldBe("NaN / 1? true : false", "false");
+shouldBe("NaN % -1 ? true : false", "false");
+shouldBe("NaN % 0? true : false", "false");
+shouldBe("NaN % 1? true : false", "false");
+shouldBe("NaN + -1 ? true : false", "false");
+shouldBe("NaN + 0? true : false", "false");
+shouldBe("NaN + 1? true : false", "false");
+shouldBe("NaN - -1 ? true : false", "false");
+shouldBe("NaN - 0? true : false", "false");
+shouldBe("NaN - 1? true : false", "false");
+shouldBe("NaN & -1 ? true : false", "false");
+shouldBe("NaN & 0? true : false", "false");
+shouldBe("NaN & 1? true : false", "false");
+shouldBe("NaN | -1 ? true : false", "true");
+shouldBe("NaN | 0? true : false", "false");
+shouldBe("NaN | 1? true : false", "true");
+shouldBe("NaN ^ -1 ? true : false", "true");
+shouldBe("NaN ^ 0? true : false", "false");
+shouldBe("NaN ^ 1? true : false", "true");
+shouldBe("+NaN ? true : false", "false");
+shouldBe("-NaN ? true : false", "false");
+shouldBe("NaN && true ? true : false", "false");
+shouldBe("NaN && false ? true : false", "false");
+shouldBe("NaN || true ? true : false", "true");
+shouldBe("NaN || false ? true : false", "false");
+shouldBe("(function(){var nan = NaN; return nan-- ? true : false})()", "false");
+shouldBe("(function(){var nan = NaN; return nan++ ? true : false})()", "false");
+shouldBe("(function(){var nan = NaN; return --nan ? true : false})()", "false");
+shouldBe("(function(){var nan = NaN; return ++nan ? true : false})()", "false");
+shouldBe("(function(){var Undefined = undefined; return Undefined-- ? true : false})()", "false");
+shouldBe("(function(){var Undefined = undefined; return Undefined++ ? true : false})()", "false");
+shouldBe("(function(){var Undefined = undefined; return --Undefined ? true : false})()", "false");
+shouldBe("(function(){var Undefined = undefined; return ++Undefined ? true : false})()", "false");
diff --git a/test/webkit/cyclic-prototypes-expected.txt b/test/webkit/cyclic-prototypes-expected.txt
new file mode 100644 (file)
index 0000000..7ac87b0
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test makes sure we don't hang when setting cyclic prototype values: http://bugs.webkit.org/show_bug.cgi?id=6985
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o1.__proto__ = o3; threw exception Error: Cyclic __proto__ value.
+PASS ({}).hasOwnProperty.call(o1, '__proto__') is false
+PASS ({}).hasOwnProperty.call(o1, '__proto__') is true
+PASS Object.getPrototypeOf(o1) is null
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/cyclic-prototypes.js b/test/webkit/cyclic-prototypes.js
new file mode 100644 (file)
index 0000000..35f5775
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This test makes sure we don't hang when setting cyclic prototype values: http://bugs.webkit.org/show_bug.cgi?id=6985")
+
+var o1 = { p1: 1 };
+var o2 = { p2: 2 };
+o2.__proto__ = o1;
+var o3 = { p3: 3 };
+o3.__proto__ = o2;
+
+// Try to create a cyclical prototype chain.
+shouldThrow("o1.__proto__ = o3;");
+
+// This changes behaviour, since __proto__ is an accessor on Object.prototype.
+o1.__proto__ = null;
+
+shouldBeFalse("({}).hasOwnProperty.call(o1, '__proto__')");
+o1.__proto__ = o3;
+shouldBeTrue("({}).hasOwnProperty.call(o1, '__proto__')");
+shouldBe("Object.getPrototypeOf(o1)", "null");
diff --git a/test/webkit/date-DST-pre-1970-expected.txt b/test/webkit/date-DST-pre-1970-expected.txt
new file mode 100644 (file)
index 0000000..0bd2635
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests the DST status in dates earlier than 1970-01-01 00:00 UTC. Regardless of your time zone, it should not fail. This tests time zones: US/Pacific, US/Central, US/Mountain, US/Eastern, CET, Asia/Jerusalem and NZ.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (new Date(1970, 0, 1)).getHours() is 0
+PASS (new Date(1969, 8, 1)).getHours() is 0
+PASS (new Date(1969, 9, 28)).getHours() is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/date-DST-pre-1970.js b/test/webkit/date-DST-pre-1970.js
new file mode 100644 (file)
index 0000000..a8ac4e7
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests the DST status in dates earlier than 1970-01-01 00:00 UTC. Regardless of your time zone, it should not fail. This tests time zones: US/Pacific, US/Central, US/Mountain, US/Eastern, CET, Asia/Jerusalem and NZ."
+);
+
+shouldBe("(new Date(1970, 0, 1)).getHours()", "0");
+shouldBe("(new Date(1969, 8, 1)).getHours()", "0");
+shouldBe("(new Date(1969, 9, 28)).getHours()", "0");
diff --git a/test/webkit/date-constructor-expected.txt b/test/webkit/date-constructor-expected.txt
new file mode 100644 (file)
index 0000000..366a39d
--- /dev/null
@@ -0,0 +1,63 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test case tests the Date constructor. In particular, it tests many cases of creating a Date from another Date and creating a Date from an object that has both valueOf and toString functions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS isNaN(new Date("")) is true
+PASS new Date(1111).getTime() is 1111
+PASS new Date(object).getTime() is 1111
+PASS new Date(new Date(1111)).getTime() is 1111
+PASS new Date(new Date(1111).toString()).getTime() is 1000
+PASS new Date(1111, 1).getTime() - timeZoneOffset is -27104803200000
+PASS new Date(1111, 1, 1).getTime() - timeZoneOffset is -27104803200000
+PASS new Date(1111, 1, 1, 1).getTime() - timeZoneOffset is -27104799600000
+PASS new Date(1111, 1, 1, 1, 1).getTime() - timeZoneOffset is -27104799540000
+PASS new Date(1111, 1, 1, 1, 1, 1).getTime() - timeZoneOffset is -27104799539000
+PASS new Date(1111, 1, 1, 1, 1, 1, 1).getTime() - timeZoneOffset is -27104799538999
+PASS new Date(1111, 1, 1, 1, 1, 1, 1, 1).getTime() - timeZoneOffset is -27104799538999
+PASS new Date(1111, 1, 1, 1, 1, 1, 1, 1, 1).getTime() - timeZoneOffset is -27104799538999
+PASS new Date(1111, 1, 1, 1, 1, 1, 1, 1, 1).getTime() - timeZoneOffset is -27104799538999
+PASS new Date(new Date(1111, 1)).getTime() - timeZoneOffset is -27104803200000
+PASS new Date(new Date(1111, 1, 1)).getTime() - timeZoneOffset is -27104803200000
+PASS new Date(new Date(1111, 1, 1, 1)).getTime() - timeZoneOffset is -27104799600000
+PASS new Date(new Date(1111, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset is -27104799539000
+PASS new Date(new Date(1111, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset is -27104799538999
+PASS new Date(new Date(1111, 1, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset is -27104799538999
+PASS new Date(new Date(1111, 1, 1, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset is -27104799538999
+PASS Number(new Date(new Date(Infinity, 1, 1, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset) is Number.NaN
+PASS Number(new Date(new Date(1, Infinity, 1, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset) is Number.NaN
+PASS Number(new Date(new Date(1, 1, Infinity, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset) is Number.NaN
+PASS Number(new Date(new Date(1, 1, 1, Infinity, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset) is Number.NaN
+PASS Number(new Date(new Date(1, 1, 1, 1, Infinity, 1, 1, 1, 1)).getTime() - timeZoneOffset) is Number.NaN
+PASS Number(new Date(new Date(1, 1, 1, 1, 1, Infinity, 1, 1, 1)).getTime() - timeZoneOffset) is Number.NaN
+PASS Number(new Date(new Date(1, 1, 1, 1, 1, 1, Infinity, 1, 1)).getTime() - timeZoneOffset) is Number.NaN
+PASS Number(new Date(new Date(1, 1, 1, 1, 1, 1, 1, 1, Infinity)).getTime() - timeZoneOffset) is -2174770738999
+PASS testStr is "1234567"
+PASS testStr is "1234567"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/date-constructor.js b/test/webkit/date-constructor.js
new file mode 100644 (file)
index 0000000..e96d970
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test case tests the Date constructor. ' +
+'In particular, it tests many cases of creating a Date from another Date ' +
+'and creating a Date from an object that has both valueOf and toString functions.'
+);
+
+var object = new Object;
+object.valueOf = function() { return 1111; }
+object.toString = function() { return "2222"; }
+
+shouldBe('isNaN(new Date(""))', 'true');
+
+var timeZoneOffset = Date.parse("Dec 25 1995") - Date.parse("Dec 25 1995 GMT");
+
+shouldBe('new Date(1111).getTime()', '1111');
+shouldBe('new Date(object).getTime()', '1111');
+shouldBe('new Date(new Date(1111)).getTime()', '1111');
+shouldBe('new Date(new Date(1111).toString()).getTime()', '1000');
+
+shouldBe('new Date(1111, 1).getTime() - timeZoneOffset', '-27104803200000');
+shouldBe('new Date(1111, 1, 1).getTime() - timeZoneOffset', '-27104803200000');
+shouldBe('new Date(1111, 1, 1, 1).getTime() - timeZoneOffset', '-27104799600000');
+shouldBe('new Date(1111, 1, 1, 1, 1).getTime() - timeZoneOffset', '-27104799540000');
+shouldBe('new Date(1111, 1, 1, 1, 1, 1).getTime() - timeZoneOffset', '-27104799539000');
+shouldBe('new Date(1111, 1, 1, 1, 1, 1, 1).getTime() - timeZoneOffset', '-27104799538999');
+shouldBe('new Date(1111, 1, 1, 1, 1, 1, 1, 1).getTime() - timeZoneOffset', '-27104799538999');
+shouldBe('new Date(1111, 1, 1, 1, 1, 1, 1, 1, 1).getTime() - timeZoneOffset', '-27104799538999');
+shouldBe('new Date(1111, 1, 1, 1, 1, 1, 1, 1, 1).getTime() - timeZoneOffset', '-27104799538999');
+
+shouldBe('new Date(new Date(1111, 1)).getTime() - timeZoneOffset', '-27104803200000');
+shouldBe('new Date(new Date(1111, 1, 1)).getTime() - timeZoneOffset', '-27104803200000');
+shouldBe('new Date(new Date(1111, 1, 1, 1)).getTime() - timeZoneOffset', '-27104799600000');
+shouldBe('new Date(new Date(1111, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset', '-27104799539000');
+shouldBe('new Date(new Date(1111, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset', '-27104799538999');
+shouldBe('new Date(new Date(1111, 1, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset', '-27104799538999');
+shouldBe('new Date(new Date(1111, 1, 1, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset', '-27104799538999');
+
+shouldBe("Number(new Date(new Date(Infinity, 1, 1, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset)", 'Number.NaN');
+shouldBe("Number(new Date(new Date(1, Infinity, 1, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset)", 'Number.NaN');
+shouldBe("Number(new Date(new Date(1, 1, Infinity, 1, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset)", 'Number.NaN');
+shouldBe("Number(new Date(new Date(1, 1, 1, Infinity, 1, 1, 1, 1, 1)).getTime() - timeZoneOffset)", 'Number.NaN');
+shouldBe("Number(new Date(new Date(1, 1, 1, 1, Infinity, 1, 1, 1, 1)).getTime() - timeZoneOffset)", 'Number.NaN');
+shouldBe("Number(new Date(new Date(1, 1, 1, 1, 1, Infinity, 1, 1, 1)).getTime() - timeZoneOffset)", 'Number.NaN');
+shouldBe("Number(new Date(new Date(1, 1, 1, 1, 1, 1, Infinity, 1, 1)).getTime() - timeZoneOffset)", 'Number.NaN');
+shouldBe("Number(new Date(new Date(1, 1, 1, 1, 1, 1, 1, 1, Infinity)).getTime() - timeZoneOffset)", '-2174770738999');
+
+// In Firefox, the results of the following tests are timezone-dependent, which likely implies that the implementation is not quite correct.
+// Our results are even worse, though, as the dates are clipped: (new Date(1111, 1201).getTime()) == (new Date(1111, 601).getTime())
+// shouldBe('new Date(1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111).getTime() - timeZoneOffset', '-24085894227889');
+// shouldBe('new Date(new Date(1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111)).getTime() - timeZoneOffset', '-24085894227889');
+
+// Regression test for Bug 26978 (https://bugs.webkit.org/show_bug.cgi?id=26978)
+var testStr = "";
+var year = { valueOf: function() { testStr += 1; return 2007; } };
+var month = { valueOf: function() { testStr += 2; return 2; } };
+var date = { valueOf: function() { testStr += 3; return 4; } };
+var hours = { valueOf: function() { testStr += 4; return 13; } };
+var minutes = { valueOf: function() { testStr += 5; return 50; } };
+var seconds = { valueOf: function() { testStr += 6; return 0; } };
+var ms = { valueOf: function() { testStr += 7; return 999; } };
+
+testStr = "";
+new Date(year, month, date, hours, minutes, seconds, ms);
+shouldBe('testStr', '\"1234567\"');
+
+testStr = "";
+Date.UTC(year, month, date, hours, minutes, seconds, ms);
+shouldBe('testStr', '\"1234567\"');
diff --git a/test/webkit/date-daysfrom1970-overflow-expected.txt b/test/webkit/date-daysfrom1970-overflow-expected.txt
new file mode 100644 (file)
index 0000000..bb9d221
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test confirms an assertion in dateToDaysFrom1970() in wtf/DateMath.cpp passes. The function had a bug setting a number larger than INT_MAX to an int variable.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS d.getTime() is NaN
+PASS Date.UTC(1970, 0, 1, 0, 0, 0, 0) is 0
+PASS d.getTime() is NaN
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/date-daysfrom1970-overflow.js b/test/webkit/date-daysfrom1970-overflow.js
new file mode 100644 (file)
index 0000000..69b40b3
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('This test confirms an assertion in dateToDaysFrom1970() in wtf/DateMath.cpp passes. The function had a bug setting a number larger than INT_MAX to an int variable.');
+
+var d = new Date(20000000, 0, 1);
+shouldBe('d.getTime()', 'NaN');
+
+shouldBe('Date.UTC(1970, 0, 1, 0, 0, 0, 0)', '0');
+
+d = new Date(-20000000, 0, 1);
+shouldBe('d.getTime()', 'NaN');
diff --git a/test/webkit/date-parse-comments-test-expected.txt b/test/webkit/date-parse-comments-test-expected.txt
new file mode 100644 (file)
index 0000000..038f278
--- /dev/null
@@ -0,0 +1,170 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+test of JavaScript date parsing (comments in parentheses)
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Date.parse("Dec ((27) 26 (24)) 25 1995 1:30 PM UTC") == 819898200000 is true
+PASS Date.parse("DEC ((27) 26 (24)) 25 1995 1:30 PM UTC") == 819898200000 is true
+PASS Date.parse("dec ((27) 26 (24)) 25 1995 1:30 pm utc") == 819898200000 is true
+PASS Date.parse("Dec 25 1995 1:30 PM UTC (") == 819898200000 is true
+PASS Date.parse("DEC 25 1995 1:30 PM UTC (") == 819898200000 is true
+PASS Date.parse("dec 25 1995 1:30 pm utc (") == 819898200000 is true
+PASS Date.parse("Dec 25 1995 1:30 (PM)) UTC") is NaN
+PASS Date.parse("DEC 25 1995 1:30 (PM)) UTC") is NaN
+PASS Date.parse("dec 25 1995 1:30 (pm)) utc") is NaN
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) GMT (EST)") == 819849600000 is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) GMT (EST)") == 819849600000 is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) gmt (est)") == 819849600000 is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996)") == 819849600000 + timeZoneOffset is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996)") == 819849600000 + timeZoneOffset is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996)") == 819849600000 + timeZoneOffset is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 (1:40) GMT (EST)") == 819855000000 is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 1:30 (1:40) GMT (EST)") == 819855000000 is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 1:30 (1:40) gmt (est)") == 819855000000 is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 (1:40)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 1:30 (1:40)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 1:30 (1:40)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 ") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 1:30 ") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 1:30 ") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 AM (1:40 PM) GMT (EST)") == 819855000000 is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 1:30 AM (1:40 PM) GMT (EST)") == 819855000000 is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 1:30 am (1:40 pm) gmt (est)") == 819855000000 is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 AM (1:40 PM)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 1:30 AM (1:40 PM)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 1:30 am (1:40 pm)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("Dec 25 1995 1:30( )AM (PM)") is NaN
+PASS Date.parse("DEC 25 1995 1:30( )AM (PM)") is NaN
+PASS Date.parse("dec 25 1995 1:30( )am (pm)") is NaN
+PASS Date.parse("Dec 25 1995 1:30 AM (PM)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("DEC 25 1995 1:30 AM (PM)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("dec 25 1995 1:30 am (pm)") == 819855000000 + timeZoneOffset is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 13:30 (13:40) GMT (PST)") == 819898200000 is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 13:30 (13:40) GMT (PST)") == 819898200000 is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 13:30 (13:40) gmt (pst)") == 819898200000 is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 13:30 (13:40)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 13:30 (13:40)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 13:30 (13:40)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 13:30 (13:40) 1995 (1996)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 13:30 (13:40) 1995 (1996)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(nov) dec (24) 25 (26) 13:30 (13:40) 1995 (1996)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 13:30 (13:40) ") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 13:30 (13:40) ") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 13:30 (13:40) ") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 (1:40) PM (AM) GMT (PST)") == 819898200000 is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 1:30 (1:40) PM (AM) GMT (PST)") == 819898200000 is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 1:30 (1:40) pm (am) gmt (pst)") == 819898200000 is true
+PASS Date.parse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 (1:40) PM (AM)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(NOV) DEC (24) 25 (26) 1995 (1996) 1:30 (1:40) PM (AM)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("(nov) dec (24) 25 (26) 1995 (1996) 1:30 (1:40) pm (am)") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("Dec 25 1995 1:30(AM)PM") is NaN
+PASS Date.parse("DEC 25 1995 1:30(AM)PM") is NaN
+PASS Date.parse("dec 25 1995 1:30(am)pm") is NaN
+PASS Date.parse("Dec 25 1995 1:30 (AM)PM ") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("DEC 25 1995 1:30 (AM)PM ") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("dec 25 1995 1:30 (am)pm ") == 819898200000 + timeZoneOffset is true
+PASS Date.parse("Dec 25 1995 (PDT)UTC(PST)") == 819849600000 is true
+PASS Date.parse("DEC 25 1995 (PDT)UTC(PST)") == 819849600000 is true
+PASS Date.parse("dec 25 1995 (pdt)utc(pst)") == 819849600000 is true
+PASS Date.parse("Dec 25 1995 (PDT)UT(PST)") == 819849600000 is true
+PASS Date.parse("DEC 25 1995 (PDT)UT(PST)") == 819849600000 is true
+PASS Date.parse("dec 25 1995 (pdt)ut(pst)") == 819849600000 is true
+PASS Date.parse("Dec 25 1995 (UTC)PST(GMT)") == 819878400000 is true
+PASS Date.parse("DEC 25 1995 (UTC)PST(GMT)") == 819878400000 is true
+PASS Date.parse("dec 25 1995 (utc)pst(gmt)") == 819878400000 is true
+PASS Date.parse("Dec 25 1995 (UTC)PDT(GMT)") == 819874800000 is true
+PASS Date.parse("DEC 25 1995 (UTC)PDT(GMT)") == 819874800000 is true
+PASS Date.parse("dec 25 1995 (utc)pdt(gmt)") == 819874800000 is true
+PASS Date.parse("Dec 25 1995 1:30 (PDT)UTC(PST)") == 819855000000 is true
+PASS Date.parse("DEC 25 1995 1:30 (PDT)UTC(PST)") == 819855000000 is true
+PASS Date.parse("dec 25 1995 1:30 (pdt)utc(pst)") == 819855000000 is true
+PASS Date.parse("Dec 25 1995 1:30 (PDT)UT(PST)") == 819855000000 is true
+PASS Date.parse("DEC 25 1995 1:30 (PDT)UT(PST)") == 819855000000 is true
+PASS Date.parse("dec 25 1995 1:30 (pdt)ut(pst)") == 819855000000 is true
+PASS Date.parse("Dec 25 1995 1:30 (UTC)PST(GMT)") == 819883800000 is true
+PASS Date.parse("DEC 25 1995 1:30 (UTC)PST(GMT)") == 819883800000 is true
+PASS Date.parse("dec 25 1995 1:30 (utc)pst(gmt)") == 819883800000 is true
+PASS Date.parse("Dec 25 1995 1:30 (UTC)PDT(GMT)") == 819880200000 is true
+PASS Date.parse("DEC 25 1995 1:30 (UTC)PDT(GMT)") == 819880200000 is true
+PASS Date.parse("dec 25 1995 1:30 (utc)pdt(gmt)") == 819880200000 is true
+PASS Date.parse("Dec 25 1995 1:30 (AM) PM (PST) UTC") == 819898200000 is true
+PASS Date.parse("DEC 25 1995 1:30 (AM) PM (PST) UTC") == 819898200000 is true
+PASS Date.parse("dec 25 1995 1:30 (am) pm (pst) utc") == 819898200000 is true
+PASS Date.parse("Dec 25 1995 1:30 PM (AM) (PST) UT") == 819898200000 is true
+PASS Date.parse("DEC 25 1995 1:30 PM (AM) (PST) UT") == 819898200000 is true
+PASS Date.parse("dec 25 1995 1:30 pm (am) (pst) ut") == 819898200000 is true
+PASS Date.parse("Dec 25 1995 1:30 PM (AM) (UTC) PST") == 819927000000 is true
+PASS Date.parse("DEC 25 1995 1:30 PM (AM) (UTC) PST") == 819927000000 is true
+PASS Date.parse("dec 25 1995 1:30 pm (am) (utc) pst") == 819927000000 is true
+PASS Date.parse("Dec 25 1995 1:30 (AM) PM PDT (UTC)") == 819923400000 is true
+PASS Date.parse("DEC 25 1995 1:30 (AM) PM PDT (UTC)") == 819923400000 is true
+PASS Date.parse("dec 25 1995 1:30 (am) pm pdt (utc)") == 819923400000 is true
+PASS Date.parse("Dec 25 1995 XXX (GMT)") is NaN
+PASS Date.parse("DEC 25 1995 XXX (GMT)") is NaN
+PASS Date.parse("dec 25 1995 xxx (gmt)") is NaN
+PASS Date.parse("Dec 25 1995 1:30 XXX (GMT)") is NaN
+PASS Date.parse("DEC 25 1995 1:30 XXX (GMT)") is NaN
+PASS Date.parse("dec 25 1995 1:30 xxx (gmt)") is NaN
+PASS Date.parse("Dec 25 1995 1:30 U(TC)") is NaN
+PASS Date.parse("DEC 25 1995 1:30 U(TC)") is NaN
+PASS Date.parse("dec 25 1995 1:30 u(tc)") is NaN
+PASS Date.parse("Dec 25 1995 1:30 V(UTC)") is NaN
+PASS Date.parse("DEC 25 1995 1:30 V(UTC)") is NaN
+PASS Date.parse("dec 25 1995 1:30 v(utc)") is NaN
+PASS Date.parse("Dec 25 1995 1:30 (UTC)W") is NaN
+PASS Date.parse("DEC 25 1995 1:30 (UTC)W") is NaN
+PASS Date.parse("dec 25 1995 1:30 (utc)w") is NaN
+PASS Date.parse("Dec 25 1995 1:30 (GMT)X") is NaN
+PASS Date.parse("DEC 25 1995 1:30 (GMT)X") is NaN
+PASS Date.parse("dec 25 1995 1:30 (gmt)x") is NaN
+PASS Date.parse("Dec 25 1995 0:30 (PM) GMT") == 819851400000 is true
+PASS Date.parse("DEC 25 1995 0:30 (PM) GMT") == 819851400000 is true
+PASS Date.parse("dec 25 1995 0:30 (pm) gmt") == 819851400000 is true
+PASS Date.parse("Dec 25 1995 (1)0:30 AM GMT") == 819851400000 is true
+PASS Date.parse("DEC 25 1995 (1)0:30 AM GMT") == 819851400000 is true
+PASS Date.parse("dec 25 1995 (1)0:30 am gmt") == 819851400000 is true
+PASS Date.parse("Dec 25 1995 (1)0:30 PM GMT") == 819894600000 is true
+PASS Date.parse("DEC 25 1995 (1)0:30 PM GMT") == 819894600000 is true
+PASS Date.parse("dec 25 1995 (1)0:30 pm gmt") == 819894600000 is true
+PASS Date.parse("Anf(Dec) 25 1995 GMT") is NaN
+PASS Date.parse("ANF(DEC) 25 1995 GMT") is NaN
+PASS Date.parse("anf(dec) 25 1995 gmt") is NaN
+PASS Date.parse("(Sat) Wed (Nov) Dec (Nov) 25 1995 1:30 GMT") == 819855000000 is true
+PASS Date.parse("(SAT) WED (NOV) DEC (NOV) 25 1995 1:30 GMT") == 819855000000 is true
+PASS Date.parse("(sat) wed (nov) dec (nov) 25 1995 1:30 gmt") == 819855000000 is true
+PASS Date.parse("Wed (comment 1) (comment 2) Dec 25 1995 1:30 GMT") == 819855000000 is true
+PASS Date.parse("WED (COMMENT 1) (COMMENT 2) DEC 25 1995 1:30 GMT") == 819855000000 is true
+PASS Date.parse("wed (comment 1) (comment 2) dec 25 1995 1:30 gmt") == 819855000000 is true
+PASS Date.parse("Wed(comment 1) (comment 2) Dec 25 1995 1:30 GMT") == 819855000000 is true
+PASS Date.parse("WED(COMMENT 1) (COMMENT 2) DEC 25 1995 1:30 GMT") == 819855000000 is true
+PASS Date.parse("wed(comment 1) (comment 2) dec 25 1995 1:30 gmt") == 819855000000 is true
+PASS Date.parse("We(comment 1) (comment 2) Dec 25 1995 1:30 GMT") == 819855000000 is true
+PASS Date.parse("WE(COMMENT 1) (COMMENT 2) DEC 25 1995 1:30 GMT") == 819855000000 is true
+PASS Date.parse("we(comment 1) (comment 2) dec 25 1995 1:30 gmt") == 819855000000 is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/date-parse-comments-test.js b/test/webkit/date-parse-comments-test.js
new file mode 100644 (file)
index 0000000..2a4d8b6
--- /dev/null
@@ -0,0 +1,98 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"test of JavaScript date parsing (comments in parentheses)"
+);
+
+function testDateParse(date, numericResult)
+{
+    if (numericResult == "NaN") {
+        shouldBeNaN('Date.parse("' + date + '")');
+        shouldBeNaN('Date.parse("' + date.toUpperCase() + '")');
+        shouldBeNaN('Date.parse("' + date.toLowerCase() + '")');
+    } else {
+        shouldBeTrue('Date.parse("' + date + '") == ' + numericResult);
+        shouldBeTrue('Date.parse("' + date.toUpperCase() + '") == ' + numericResult);
+        shouldBeTrue('Date.parse("' + date.toLowerCase() + '") == ' + numericResult);
+    }
+}
+
+var timeZoneOffset = Date.parse(" Dec 25 1995 1:30 ") - Date.parse(" Dec 25 1995 1:30 GMT ");
+
+testDateParse("Dec ((27) 26 (24)) 25 1995 1:30 PM UTC", "819898200000");
+testDateParse("Dec 25 1995 1:30 PM UTC (", "819898200000");
+testDateParse("Dec 25 1995 1:30 (PM)) UTC", "NaN");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) GMT (EST)", "819849600000");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996)", "819849600000 + timeZoneOffset");
+
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 (1:40) GMT (EST)", "819855000000");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 (1:40)", "819855000000 + timeZoneOffset");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 ", "819855000000 + timeZoneOffset");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 AM (1:40 PM) GMT (EST)", "819855000000");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 AM (1:40 PM)", "819855000000 + timeZoneOffset");
+testDateParse("Dec 25 1995 1:30( )AM (PM)", "NaN");
+testDateParse("Dec 25 1995 1:30 AM (PM)", "819855000000 + timeZoneOffset");
+
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 13:30 (13:40) GMT (PST)", "819898200000");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 13:30 (13:40)", "819898200000 + timeZoneOffset");
+testDateParse('(Nov) Dec (24) 25 (26) 13:30 (13:40) 1995 (1996)', "819898200000 + timeZoneOffset");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 13:30 (13:40) ", "819898200000 + timeZoneOffset");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 (1:40) PM (AM) GMT (PST)", "819898200000");
+testDateParse("(Nov) Dec (24) 25 (26) 1995 (1996) 1:30 (1:40) PM (AM)", "819898200000 + timeZoneOffset");
+testDateParse("Dec 25 1995 1:30(AM)PM", "NaN");
+testDateParse("Dec 25 1995 1:30 (AM)PM ", "819898200000 + timeZoneOffset");
+
+testDateParse("Dec 25 1995 (PDT)UTC(PST)", "819849600000");
+testDateParse("Dec 25 1995 (PDT)UT(PST)", "819849600000");
+testDateParse("Dec 25 1995 (UTC)PST(GMT)", "819878400000");
+testDateParse("Dec 25 1995 (UTC)PDT(GMT)", "819874800000");
+
+testDateParse("Dec 25 1995 1:30 (PDT)UTC(PST)", "819855000000");
+testDateParse("Dec 25 1995 1:30 (PDT)UT(PST)", "819855000000");
+testDateParse("Dec 25 1995 1:30 (UTC)PST(GMT)", "819883800000");
+testDateParse("Dec 25 1995 1:30 (UTC)PDT(GMT)", "819880200000");
+
+testDateParse("Dec 25 1995 1:30 (AM) PM (PST) UTC", "819898200000");
+testDateParse("Dec 25 1995 1:30 PM (AM) (PST) UT", "819898200000");
+testDateParse("Dec 25 1995 1:30 PM (AM) (UTC) PST", "819927000000");
+testDateParse("Dec 25 1995 1:30 (AM) PM PDT (UTC)", "819923400000");
+
+testDateParse("Dec 25 1995 XXX (GMT)", "NaN");
+testDateParse("Dec 25 1995 1:30 XXX (GMT)", "NaN");
+
+testDateParse("Dec 25 1995 1:30 U(TC)", "NaN");
+testDateParse("Dec 25 1995 1:30 V(UTC)", "NaN");
+testDateParse("Dec 25 1995 1:30 (UTC)W", "NaN");
+testDateParse("Dec 25 1995 1:30 (GMT)X", "NaN");
+
+testDateParse("Dec 25 1995 0:30 (PM) GMT", "819851400000");
+testDateParse("Dec 25 1995 (1)0:30 AM GMT", "819851400000");
+testDateParse("Dec 25 1995 (1)0:30 PM GMT", "819894600000");
+
+testDateParse("Anf(Dec) 25 1995 GMT", "NaN");
+
+testDateParse("(Sat) Wed (Nov) Dec (Nov) 25 1995 1:30 GMT", "819855000000");
+testDateParse("Wed (comment 1) (comment 2) Dec 25 1995 1:30 GMT", "819855000000");
+testDateParse("Wed(comment 1) (comment 2) Dec 25 1995 1:30 GMT", "819855000000");
+testDateParse("We(comment 1) (comment 2) Dec 25 1995 1:30 GMT", "819855000000");
diff --git a/test/webkit/date-set-to-nan-expected.txt b/test/webkit/date-set-to-nan-expected.txt
new file mode 100644 (file)
index 0000000..4ec7869
--- /dev/null
@@ -0,0 +1,129 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests if the Date setters handle invalid parameters correctly resulting in a NaN date and if a recovery from such a NaN date is only possible by using the date.setTime() and date.set[[UTC]Full]Year() functions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS date.setTime(arg0)
+PASS date.setTime()
+PASS recover from NaN date using date.setTime()
+PASS date.setTime passed all tests
+PASS date.setMilliseconds(arg0)
+PASS date.setMilliseconds()
+PASS no recovering from NaN date using date.setMilliseconds(arg0)
+PASS date.setMilliseconds passed all tests
+PASS date.setUTCMilliseconds(arg0)
+PASS date.setUTCMilliseconds()
+PASS no recovering from NaN date using date.setUTCMilliseconds(arg0)
+PASS date.setUTCMilliseconds passed all tests
+PASS date.setSeconds(arg0, arg1)
+PASS no recovering from NaN date using date.setSeconds(arg0, 0)
+PASS date.setSeconds(arg0)
+PASS date.setSeconds()
+PASS no recovering from NaN date using date.setSeconds(arg0)
+PASS date.setSeconds passed all tests
+PASS date.setUTCSeconds(arg0, arg1)
+PASS no recovering from NaN date using date.setUTCSeconds(arg0, 0)
+PASS date.setUTCSeconds(arg0)
+PASS date.setUTCSeconds()
+PASS no recovering from NaN date using date.setUTCSeconds(arg0)
+PASS date.setUTCSeconds passed all tests
+PASS date.setMinutes(arg0, arg1, arg2)
+PASS no recovering from NaN date using date.setMinutes(arg0, 0, 0)
+PASS date.setMinutes(arg0, arg1)
+PASS no recovering from NaN date using date.setMinutes(arg0, 0)
+PASS date.setMinutes(arg0)
+PASS date.setMinutes()
+PASS no recovering from NaN date using date.setMinutes(arg0)
+PASS date.setMinutes passed all tests
+PASS date.setUTCMinutes(arg0, arg1, arg2)
+PASS no recovering from NaN date using date.setUTCMinutes(arg0, 0, 0)
+PASS date.setUTCMinutes(arg0, arg1)
+PASS no recovering from NaN date using date.setUTCMinutes(arg0, 0)
+PASS date.setUTCMinutes(arg0)
+PASS date.setUTCMinutes()
+PASS no recovering from NaN date using date.setUTCMinutes(arg0)
+PASS date.setUTCMinutes passed all tests
+PASS date.setHours(arg0, arg1, arg2, arg3)
+PASS no recovering from NaN date using date.setHours(arg0, 0, 0, 0)
+PASS date.setHours(arg0, arg1, arg2)
+PASS no recovering from NaN date using date.setHours(arg0, 0, 0)
+PASS date.setHours(arg0, arg1)
+PASS no recovering from NaN date using date.setHours(arg0, 0)
+PASS date.setHours(arg0)
+PASS date.setHours()
+PASS no recovering from NaN date using date.setHours(arg0)
+PASS date.setHours passed all tests
+PASS date.setUTCHours(arg0, arg1, arg2, arg3)
+PASS no recovering from NaN date using date.setUTCHours(arg0, 0, 0, 0)
+PASS date.setUTCHours(arg0, arg1, arg2)
+PASS no recovering from NaN date using date.setUTCHours(arg0, 0, 0)
+PASS date.setUTCHours(arg0, arg1)
+PASS no recovering from NaN date using date.setUTCHours(arg0, 0)
+PASS date.setUTCHours(arg0)
+PASS date.setUTCHours()
+PASS no recovering from NaN date using date.setUTCHours(arg0)
+PASS date.setUTCHours passed all tests
+PASS date.setDate(arg0)
+PASS date.setDate()
+PASS no recovering from NaN date using date.setDate(arg0)
+PASS date.setDate passed all tests
+PASS date.setUTCDate(arg0)
+PASS date.setUTCDate()
+PASS no recovering from NaN date using date.setUTCDate(arg0)
+PASS date.setUTCDate passed all tests
+PASS date.setMonth(arg0, arg1)
+PASS no recovering from NaN date using date.setMonth(arg0, 0)
+PASS date.setMonth(arg0)
+PASS date.setMonth()
+PASS no recovering from NaN date using date.setMonth(arg0)
+PASS date.setMonth passed all tests
+PASS date.setUTCMonth(arg0, arg1)
+PASS no recovering from NaN date using date.setUTCMonth(arg0, 0)
+PASS date.setUTCMonth(arg0)
+PASS date.setUTCMonth()
+PASS no recovering from NaN date using date.setUTCMonth(arg0)
+PASS date.setUTCMonth passed all tests
+PASS date.setFullYear(arg0, arg1, arg2)
+PASS date.setFullYear(arg0, arg1)
+PASS date.setFullYear(arg0)
+PASS date.setFullYear()
+PASS recover from NaN date using date.setFullYear()
+PASS date.setFullYear passed all tests
+PASS date.setUTCFullYear(arg0, arg1, arg2)
+PASS date.setUTCFullYear(arg0, arg1)
+PASS date.setUTCFullYear(arg0)
+PASS date.setUTCFullYear()
+PASS recover from NaN date using date.setUTCFullYear()
+PASS date.setUTCFullYear passed all tests
+PASS date.setYear(arg0)
+PASS date.setYear()
+PASS date.getYear() is compatible to JavaScript 1.3 and later
+PASS recover from NaN date using date.setUTCFullYear()
+PASS date.setYear passed all tests
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/date-set-to-nan.js b/test/webkit/date-set-to-nan.js
new file mode 100644 (file)
index 0000000..6d1c473
--- /dev/null
@@ -0,0 +1,473 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests if the Date setters handle invalid parameters correctly resulting in a NaN date and if a recovery from such a NaN date is only possible by using the date.setTime() and date.set[[UTC]Full]Year() functions."
+);
+
+var dateFunctionNameRoots = [
+    "Time",
+    "Milliseconds",
+    "UTCMilliseconds",
+    "Seconds",
+    "UTCSeconds",
+    "Minutes",
+    "UTCMinutes",
+    "Hours",
+    "UTCHours",
+    "Date",
+    "UTCDate",
+    "Month",
+    "UTCMonth",
+    "FullYear",
+    "UTCFullYear",
+    "Year"
+];
+
+var dateFunctionParameterNum = [
+    1,
+    1,
+    1,
+    2,
+    2,
+    3,
+    3,
+    4,
+    4,
+    1,
+    1,
+    2,
+    2,
+    3,
+    3,
+    1
+];
+
+var testValues = [
+    0,
+    Number.NaN,
+    Number.POSITIVE_INFINITY,
+    Number.NEGATIVE_INFINITY
+];
+
+function testDateFunctionWithValueNoRecoverNaN(functionNameRoot, steps)
+{
+    var date = new Date();
+    var setValue = date["get" + functionNameRoot]();
+    date.setMilliseconds(Number.NaN);
+    var params = [
+        "",
+        ", 0",
+        ", 0, 0",
+        ", 0, 0, 0"
+    ];
+    var setResult = (1 == steps) ?  date["set" + functionNameRoot](setValue)
+                  : ((2 == steps) ? date["set" + functionNameRoot](setValue, 0)
+                  : ((3 == steps) ? date["set" + functionNameRoot](setValue, 0, 0)
+                  :                  date["set" + functionNameRoot](setValue, 0, 0, 0)));
+    if (!isNaN(setResult)) {
+        testFailed("date(NaN).set" + functionNameRoot + "(" + setValue + params[steps - 1]
+                                   + ") was " + setResult + " instead of NaN");
+        return false;
+    }
+    var getResult = date["get" + functionNameRoot]();
+    if (!isNaN(getResult)) {
+        testFailed("date.get" + functionNameRoot + "() was " + getResult + " instead of NaN");
+        return false;
+    }
+    testPassed ("no recovering from NaN date using date.set" + functionNameRoot
+        + "(arg0" + params[steps - 1] + ")");
+    return true;
+}
+
+function testDateFunctionWithValueRecoverTime(functionNameRoot)
+{
+    var date = new Date();
+    var setValue = date["get" + functionNameRoot]();
+    date.setMilliseconds(Number.NaN);
+    var setResult = date["set" + functionNameRoot](setValue);
+    if (setValue != setResult) {
+        testFailed("date(NaN).set" + functionNameRoot + "(" + setValue + ") was " + setResult + " instead of " + setValue);
+        return false;
+    }
+    var getResult = date["get" + functionNameRoot]();
+    if (getResult != setValue) {
+        testFailed("date.get" + functionNameRoot + "() was " + getResult + " instead of " + setValue);
+        return false;
+    }
+    testPassed ("recover from NaN date using date.set" + functionNameRoot + "()");
+    return true;
+}
+
+function testDateFunctionWithValueRecoverFullYear(functionNameRoot)
+{
+    var result = true;
+    var date = new Date();
+    var setValue = date["get" + functionNameRoot]();
+    date.setMilliseconds(Number.NaN);
+    var setResult = date["set" + functionNameRoot](setValue);
+    var getResult = date["get" + functionNameRoot]();
+    if (getResult != setValue) {
+        testFailed("date.get" + functionNameRoot + "() was " + getResult + " instead of " + setValue);
+        result = false;
+    }
+    getResult = date.getMilliseconds();
+    if (getResult != 0) {
+        testFailed("date.getMilliseconds() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getSeconds();
+    if (getResult != 0) {
+        testFailed("date.getSeconds() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getMinutes();
+    if (getResult != 0) {
+        testFailed("date.getMinutes() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getHours();
+    if (getResult != 0) {
+        testFailed("date.getHours() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getDate();
+    if (getResult != 1) {
+        testFailed("date.getDate() was " + getResult + " instead of 1");
+        result = false;
+    }
+    getResult = date.getMonth();
+    if (getResult != 0) {
+        testFailed("date.getMonth() was " + getResult + " instead of 0");
+        result = false;
+    }
+    if (result)
+        testPassed ("recover from NaN date using date.setFullYear()");
+    else
+        testFailed ("recover from NaN date using date.setFullYear()");
+    return result;
+}
+
+function testDateFunctionWithValueRecoverUTCFullYear(functionNameRoot)
+{
+    var result = true;
+    var date = new Date();
+    var setValue = date["get" + functionNameRoot]();
+    date.setMilliseconds(Number.NaN);
+    var setResult = date["set" + functionNameRoot](setValue);
+    var getResult = date["get" + functionNameRoot]();
+    if (getResult != setValue) {
+        testFailed("date.get" + functionNameRoot + "() was " + getResult + " instead of " + setValue);
+        result = false;
+    }
+    getResult = date.getUTCMilliseconds();
+    if (getResult != 0) {
+        testFailed("date.getUTCMilliseconds() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getUTCSeconds();
+    if (getResult != 0) {
+        testFailed("date.getUTCSeconds() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getUTCMinutes();
+    if (getResult != 0) {
+        testFailed("date.getUTCMinutes() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getUTCHours();
+    if (getResult != 0) {
+        testFailed("date.getUTCHours() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getUTCDate();
+    if (getResult != 1) {
+        testFailed("date.getUTCDate() was " + getResult + " instead of 1");
+        result = false;
+    }
+    getResult = date.getUTCMonth();
+    if (getResult != 0) {
+        testFailed("date.getUTCMonth() was " + getResult + " instead of 0");
+        result = false;
+    }
+    if (result)
+        testPassed ("recover from NaN date using date.setUTCFullYear()");
+    else
+        testFailed ("recover from NaN date using date.setUTCFullYear()");
+    return result;
+}
+
+function testDateFunctionWithValueRecoverYear(functionNameRoot)
+{
+    var result = true;
+    var is13Compatible = true;
+
+    var date = new Date();
+    var setValue = date["get" + functionNameRoot]();
+    var fullYears = date.getFullYear() - 1900;
+    if (setValue != fullYears) {
+        testFailed("date.get" + functionNameRoot + "() was " + setValue + " instead of " + fullYears);
+        is13Compatible = false;
+    } else
+        testPassed("date.getYear() is compatible to JavaScript 1.3 and later");
+
+    date.setMilliseconds(Number.NaN);
+    var setResult = date["set" + functionNameRoot](setValue + 1900);
+    var getResult = date["get" + functionNameRoot]();
+    if (getResult != setValue) {
+        testFailed("date.get" + functionNameRoot + "() was " + getResult + " instead of " + setValue);
+        result = false;
+    }
+    getResult = date.getMilliseconds();
+    if (getResult != 0) {
+        testFailed("date.getMilliseconds() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getSeconds();
+    if (getResult != 0) {
+        testFailed("date.getSeconds() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getMinutes();
+    if (getResult != 0) {
+        testFailed("date.getMinutes() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getHours();
+    if (getResult != 0) {
+        testFailed("date.getHours() was " + getResult + " instead of 0");
+        result = false;
+    }
+    getResult = date.getDate();
+    if (getResult != 1) {
+        testFailed("date.getDate() was " + getResult + " instead of 1");
+        result = false;
+    }
+    getResult = date.getMonth();
+    if (getResult != 0) {
+        testFailed("date.getMonth() was " + getResult + " instead of 0");
+        result = false;
+    }
+    if (result)
+        testPassed ("recover from NaN date using date.setUTCFullYear()");
+    else
+        testFailed ("recover from NaN date using date.setUTCFullYear()");
+    return result && is13Compatible;
+}
+
+function makeIEHappy(functionNameRoot, value)
+{
+    var date = new Date();
+    var setResult = date["set" + functionNameRoot](value);
+    if (!isNaN(setResult)) {
+        testFailed("date.set" + functionNameRoot
+                              + "() was "
+                              + setResult + " instead of NaN");
+         return false;
+    }
+    var getResult = date["get" + functionNameRoot]();
+    if (!isNaN(getResult)) {
+        testFailed("date.get" + functionNameRoot + "() was "
+                              + getResult + " instead of NaN");
+        return false;
+    }
+    return true
+}
+
+function testDateFunctionWithValueExpectingNaN1(functionNameRoot)
+{
+    var result = true;
+    for (var idx0 in testValues)
+        if (idx0 != 0) {
+            var date = new Date();
+            var setResult = date["set" + functionNameRoot](testValues[idx0]);
+            if (!isNaN(setResult)) {
+                testFailed("date.set" + functionNameRoot + "("
+                                      + testValues[idx0] + ") was "
+                                      + setResult + " instead of NaN");
+                result = false;
+            }
+            var getResult = date["get" + functionNameRoot]();
+            if (!isNaN(getResult)) {
+                testFailed("date.get" + functionNameRoot + "() was "
+                                      + getResult + " instead of NaN");
+                result = false;
+            }
+        } else if (!makeIEHappy(functionNameRoot))
+            result = false;
+    if (result) {
+        testPassed("date.set" + functionNameRoot + "(arg0)");
+        testPassed("date.set" + functionNameRoot + "()");
+    }
+    return result;
+}
+
+function testDateFunctionWithValueExpectingNaN2(functionNameRoot)
+{
+    var result = true;
+    for (var idx0 in testValues)
+        for (var idx1 in testValues)
+            if (idx0 != 0 || idx1 != 0) {
+                var date = new Date();
+                var setResult = date["set" + functionNameRoot](testValues[idx0],
+                                                               testValues[idx1]);
+
+                if (!isNaN(setResult)) {
+                    testFailed("date.set" + functionNameRoot + "("
+                                          + testValues[idx0] + ", "
+                                          + testValues[idx1] + ") was "
+                                          + setResult + " instead of NaN");
+                    result = false;
+                }
+                var getResult = date["get" + functionNameRoot]();
+                if (!isNaN(getResult)) {
+                    testFailed("date.get" + functionNameRoot + "() was "
+                                          + getResult + " instead of NaN");
+                    result = false;
+                }
+            }
+
+    if (result)
+        testPassed("date.set" + functionNameRoot + "(arg0, arg1)");
+    return result;
+}
+
+function testDateFunctionWithValueExpectingNaN3(functionNameRoot)
+{
+    var result = true;
+    for (var idx0 in testValues)
+        for (var idx1 in testValues)
+            for (var idx2 in testValues)
+                if (idx0 != 0 || idx1 != 0 || idx2 != 0) {
+                    var date = new Date();
+                    var setResult = date["set" + functionNameRoot](testValues[idx0],
+                                                                   testValues[idx1],
+                                                                   testValues[idx2]);
+                    if (!isNaN(setResult)) {
+                        testFailed("date.set" + functionNameRoot + "("
+                                              + testValues[idx0] + ", "
+                                              + testValues[idx1] + ", "
+                                              + testValues[idx2] + ") was "
+                                              + setResult + " instead of NaN");
+                        result = false;
+                    }
+                    var getResult = date["get" + functionNameRoot]();
+                    if (!isNaN(getResult)) {
+                        testFailed("date.get" + functionNameRoot + "() was "
+                                              + getResult + " instead of NaN");
+                        result = false;
+                    }
+                }
+
+    if (result)
+        testPassed("date.set" + functionNameRoot + "(arg0, arg1, arg2)");
+    return result;
+}
+
+function testDateFunctionWithValueExpectingNaN4(functionNameRoot)
+{
+    var result = true;
+    for (var idx0 in testValues)
+        for (var idx1 in testValues)
+            for (var idx2 in testValues)
+                for (var idx3 in testValues)
+                    if (idx0 != 0 || idx1 != 0 || idx2 != 0 || idx3 != 0) {
+                        var date = new Date();
+                        var setResult = date["set" + functionNameRoot](testValues[idx0],
+                                                                       testValues[idx1],
+                                                                       testValues[idx2],
+                                                                       testValues[idx3]);
+                        if (!isNaN(setResult)) {
+                            testFailed("date.set" + functionNameRoot + "("
+                                                  + testValues[idx0] + ", "
+                                                  + testValues[idx1] + ", "
+                                                  + testValues[idx2] + ", "
+                                                  + testValues[idx3] + ") was "
+                                                  + setResult + " instead of NaN");
+                            result = false;
+                        }
+                        var getResult = date["get" + functionNameRoot]();
+                        if (!isNaN(getResult)) {
+                            testFailed("date.get" + functionNameRoot + "() was "
+                                                  + getResult + " instead of NaN");
+                            result = false;
+                        }
+                    }
+    if (result)
+        testPassed("date.set" + functionNameRoot + "(arg0, arg1, arg2, arg3)");
+    return result;
+}
+
+
+
+function testDateFunction(functionNameRoot, functionParamNum)
+{
+    var success = true;
+
+    switch (functionParamNum) {
+    case 4:
+        success &= testDateFunctionWithValueExpectingNaN4(functionNameRoot);
+        if (functionNameRoot != "Time" &&
+            functionNameRoot != "FullYear" &&
+            functionNameRoot != "UTCFullYear" &&
+            functionNameRoot != "Year")
+            success &= testDateFunctionWithValueNoRecoverNaN(functionNameRoot, 4);
+
+    case 3:
+        success &= testDateFunctionWithValueExpectingNaN3(functionNameRoot);
+        if (functionNameRoot != "Time" &&
+            functionNameRoot != "FullYear" &&
+            functionNameRoot != "UTCFullYear" &&
+            functionNameRoot != "Year")
+            success &= testDateFunctionWithValueNoRecoverNaN(functionNameRoot, 3);
+
+    case 2:
+        success &= testDateFunctionWithValueExpectingNaN2(functionNameRoot);
+        if (functionNameRoot != "Time" &&
+            functionNameRoot != "FullYear" &&
+            functionNameRoot != "UTCFullYear" &&
+            functionNameRoot != "Year")
+            success &= testDateFunctionWithValueNoRecoverNaN(functionNameRoot, 2);
+
+    case 1:
+        success &= testDateFunctionWithValueExpectingNaN1(functionNameRoot);
+        if (functionNameRoot == "Time")
+            success &= testDateFunctionWithValueRecoverTime(functionNameRoot);
+        else if (functionNameRoot == "FullYear")
+            success &= testDateFunctionWithValueRecoverFullYear(functionNameRoot);
+        else if (functionNameRoot == "UTCFullYear")
+            success &= testDateFunctionWithValueRecoverUTCFullYear(functionNameRoot);
+        else if (functionNameRoot == "Year")
+            success &= testDateFunctionWithValueRecoverYear(functionNameRoot);
+        else
+            success &= testDateFunctionWithValueNoRecoverNaN(functionNameRoot, 1);
+    }
+
+    if (success)
+        testPassed("date.set" + functionNameRoot + " passed all tests");
+}
+
+for (var x in dateFunctionNameRoots)
+{
+    testDateFunction(dateFunctionNameRoots[x], dateFunctionParameterNum[x]);
+}
diff --git a/test/webkit/date-utc-timeclip-expected.txt b/test/webkit/date-utc-timeclip-expected.txt
new file mode 100644 (file)
index 0000000..4901631
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Date.UTC() should apply TimeClip operation according to ECMA-262.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Date.UTC(275760, 8, 12, 23, 59, 59, 999) is 8639999999999999
+PASS Date.UTC(275760, 8, 13) is 8640000000000000
+PASS isNaN(Date.UTC(275760, 8, 13, 0, 0, 0, 1)) is true
+PASS isNaN(Date.UTC(275760, 8, 14)) is true
+PASS Date.UTC(-271821, 3, 20, 0, 0, 0, 1) is -8639999999999999
+PASS Date.UTC(-271821, 3, 20) is -8640000000000000
+PASS isNaN(Date.UTC(-271821, 3, 19, 23, 59, 59, 999)) is true
+PASS isNaN(Date.UTC(-271821, 3, 19)) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/date-utc-timeclip.js b/test/webkit/date-utc-timeclip.js
new file mode 100644 (file)
index 0000000..318a087
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Date.UTC() should apply TimeClip operation according to ECMA-262.');
+
+shouldBe('Date.UTC(275760, 8, 12, 23, 59, 59, 999)', '8639999999999999');
+shouldBe('Date.UTC(275760, 8, 13)', '8640000000000000');
+shouldBeTrue('isNaN(Date.UTC(275760, 8, 13, 0, 0, 0, 1))');
+shouldBeTrue('isNaN(Date.UTC(275760, 8, 14))');
+
+shouldBe('Date.UTC(-271821, 3, 20, 0, 0, 0, 1)', '-8639999999999999');
+shouldBe('Date.UTC(-271821, 3, 20)', '-8640000000000000');
+shouldBeTrue('isNaN(Date.UTC(-271821, 3, 19, 23, 59, 59, 999))');
+shouldBeTrue('isNaN(Date.UTC(-271821, 3, 19))');
diff --git a/test/webkit/debugger-expected.txt b/test/webkit/debugger-expected.txt
new file mode 100644 (file)
index 0000000..e9b4edf
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This file tests whether the 'debugger' statement throws a syntax error. (IE respects 'debugger' as a statement that behaves like a breakpoint).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/debugger.js b/test/webkit/debugger.js
new file mode 100644 (file)
index 0000000..8bc980a
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This file tests whether the 'debugger' statement throws a syntax error. (IE respects 'debugger' as a statement that behaves like a breakpoint)."
+);
+
+debugger
+debugger;
diff --git a/test/webkit/declaration-in-block-expected.txt b/test/webkit/declaration-in-block-expected.txt
new file mode 100644 (file)
index 0000000..a296cfd
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that declarations in an if block can be seen outside it.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/declaration-in-block.js b/test/webkit/declaration-in-block.js
new file mode 100644 (file)
index 0000000..39c4fc0
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that declarations in an if block can be seen outside it."
+);
+
+if (0) { var b; }
+var a = b;
diff --git a/test/webkit/delete-getters-setters-expected.txt b/test/webkit/delete-getters-setters-expected.txt
new file mode 100644 (file)
index 0000000..4ade6ba
--- /dev/null
@@ -0,0 +1,48 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that deletion of properties works properly with getters and setters.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS b1.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS a2.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS b3.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS a4.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS b5.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS a6.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS b7.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS a8.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS o1.b.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS o1.a.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS o3.b.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS o4.a.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS o5.b.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS o6.a.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS o7.b.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS o8.a.property threw exception TypeError: Cannot read property 'property' of undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/delete-getters-setters.js b/test/webkit/delete-getters-setters.js
new file mode 100644 (file)
index 0000000..92f39fa
--- /dev/null
@@ -0,0 +1,122 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that deletion of properties works properly with getters and setters."
+);
+
+b1 = 1;
+this.__defineSetter__("a1", function() {});
+this.__defineSetter__("b1", function() {});
+delete a1;
+shouldThrow("b1.property");
+
+a2 = 1;
+this.__defineSetter__("a2", function() {});
+this.__defineSetter__("b2", function() {});
+delete b2;
+shouldThrow("a2.property");
+
+b3 = 1;
+this.__defineGetter__("a3", function() {});
+this.__defineGetter__("b3", function() {});
+delete a3;
+shouldThrow("b3.property");
+
+a4 = 1;
+this.__defineGetter__("a4", function() {});
+this.__defineGetter__("b4", function() {});
+delete b4;
+shouldThrow("a4.property");
+
+b5 = 1;
+this.__defineSetter__("a5", function() {});
+this.__defineGetter__("b5", function() {});
+delete a5;
+shouldThrow("b5.property");
+
+a6 = 1;
+this.__defineSetter__("a6", function() {});
+this.__defineGetter__("b6", function() {});
+delete b6;
+shouldThrow("a6.property");
+
+b7 = 1;
+this.__defineGetter__("a7", function() {});
+this.__defineSetter__("b7", function() {});
+delete a7;
+shouldThrow("b7.property");
+
+a8 = 1;
+this.__defineGetter__("a8", function() {});
+this.__defineSetter__("b8", function() {});
+delete b8;
+shouldThrow("a8.property");
+
+var o1 = { b: 1 };
+o1.__defineSetter__("a", function() {});
+o1.__defineSetter__("b", function() {});
+delete o1.a;
+shouldThrow("o1.b.property");
+
+var o2 = { a: 1 };
+o2.__defineSetter__("a", function() {});
+o2.__defineSetter__("b", function() {});
+delete o2.b;
+shouldThrow("o1.a.property");
+
+var o3 = { b: 1 };
+o3.__defineGetter__("a", function() {});
+o3.__defineGetter__("b", function() {});
+delete o3.a;
+shouldThrow("o3.b.property");
+
+var o4 = { a: 1 };
+o4.__defineGetter__("a", function() {});
+o4.__defineGetter__("b", function() {});
+delete o4.b;
+shouldThrow("o4.a.property");
+
+var o5 = { b: 1 };
+o5.__defineSetter__("a", function() {});
+o5.__defineSetter__("b", function() {});
+delete o5.a;
+shouldThrow("o5.b.property");
+
+var o6 = { a: 1 };
+o6.__defineSetter__("a", function() {});
+o6.__defineSetter__("b", function() {});
+delete o6.b;
+shouldThrow("o6.a.property");
+
+var o7 = { b: 1 };
+o7.__defineGetter__("a", function() {});
+o7.__defineGetter__("b", function() {});
+delete o7.a;
+shouldThrow("o7.b.property");
+
+var o8 = { a: 1 };
+o8.__defineGetter__("a", function() {});
+o8.__defineGetter__("b", function() {});
+delete o8.b;
+shouldThrow("o8.a.property");
diff --git a/test/webkit/delete-then-put-expected.txt b/test/webkit/delete-then-put-expected.txt
new file mode 100644 (file)
index 0000000..191bb35
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests for a problem with put after delete that existed at one point in the past.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS props(a) is 'a,b,c,d,e'
+delete a.c
+PASS props(a) is 'a,b,d,e'
+define getter named c
+PASS props(a) is 'a,b,d,e,c'
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/delete-then-put.js b/test/webkit/delete-then-put.js
new file mode 100644 (file)
index 0000000..aa91e5d
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This tests for a problem with put after delete that existed at one point in the past.'
+);
+
+function props(o)
+{
+    var s = "";
+    for (p in o) {
+        if (s.length != 0)
+            s += ",";
+        s += p;
+    }
+    return s;
+}
+
+var a = { a:1, b:2, c:3, d:4, e:5 }
+
+shouldBe("props(a)", "'a,b,c,d,e'");
+debug("delete a.c");
+delete a.c;
+shouldBe("props(a)", "'a,b,d,e'");
+debug("define getter named c");
+a.__defineGetter__("c", function() { return 3 });
+shouldBe("props(a)", "'a,b,d,e,c'");
+debug("");
diff --git a/test/webkit/dfg-abs-backwards-propagation-expected.txt b/test/webkit/dfg-abs-backwards-propagation-expected.txt
new file mode 100644 (file)
index 0000000..6d5ff63
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG knows that a function that appears like Math.abs could potentially use value in arbitrary ways, and not just in a context that converts values to numbers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(bar, [, 1.5], 0) is void 0
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS foo(Math.abs, [1.5], 0) is Math.abs(1.5)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-abs-backwards-propagation.js b/test/webkit/dfg-abs-backwards-propagation.js
new file mode 100644 (file)
index 0000000..828e2d6
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG knows that a function that appears like Math.abs could potentially use value in arbitrary ways, and not just in a context that converts values to numbers."
+);
+
+function foo(f, array, i) {
+    return f(array[i]);
+}
+
+function bar(value) {
+    return value;
+}
+
+for (var i = 0; i < 200; ++i) {
+    var f, array, expected;
+    if (i == 190) {
+        f = "bar";
+        array = "[, 1.5]";
+        expected = "void 0";
+    } else {
+        f = "Math.abs";
+        array = "[1.5]";
+        expected = "Math.abs(1.5)";
+    }
+    shouldBe("foo(" + f + ", " + array + ", 0)", expected);
+}
+
diff --git a/test/webkit/dfg-add-not-number-expected.txt b/test/webkit/dfg-add-not-number-expected.txt
new file mode 100644 (file)
index 0000000..b5fde86
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that adding things that aren't numbers using ++ does not crash or generate bogus code.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS foo("foo" + i) is NaN
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-add-not-number.js b/test/webkit/dfg-add-not-number.js
new file mode 100644 (file)
index 0000000..df6dcdf
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that adding things that aren't numbers using ++ does not crash or generate bogus code."
+);
+
+function foo(a) {
+    a++;
+    return a;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo(\"foo\" + i)", "NaN");
+
diff --git a/test/webkit/dfg-arguments-alias-escape-expected.txt b/test/webkit/dfg-arguments-alias-escape-expected.txt
new file mode 100644 (file)
index 0000000..f681784
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests aliased uses of 'arguments' that escape.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS bar(42) is 1764
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arguments-alias-escape.js b/test/webkit/dfg-arguments-alias-escape.js
new file mode 100644 (file)
index 0000000..f7a012e
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests aliased uses of 'arguments' that escape."
+);
+
+function foo() {
+    var result = 0;
+    var a = arguments;
+    for (var i = 0; i < a.length; ++i)
+        result += a[i];
+    return [result, a];
+}
+
+function bar(x) {
+    var result = foo(x);
+    return result[0] * result[1][0];
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("bar(42)", "1764");
+
diff --git a/test/webkit/dfg-arguments-alias-expected.txt b/test/webkit/dfg-arguments-alias-expected.txt
new file mode 100644 (file)
index 0000000..18135e1
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests aliased uses of 'arguments'.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arguments-alias-one-block-expected.txt b/test/webkit/dfg-arguments-alias-one-block-expected.txt
new file mode 100644 (file)
index 0000000..475236a
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that if you alias the arguments in a very small function, arguments simplification still works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(i, i + 1) is 1
+PASS foo(i, i + 1) is 3
+PASS foo(i, i + 1) is 5
+PASS foo(i, i + 1) is 7
+PASS foo(i, i + 1) is 9
+PASS foo(i, i + 1) is 11
+PASS foo(i, i + 1) is 13
+PASS foo(i, i + 1) is 15
+PASS foo(i, i + 1) is 17
+PASS foo(i, i + 1) is 19
+PASS foo(i, i + 1) is 21
+PASS foo(i, i + 1) is 23
+PASS foo(i, i + 1) is 25
+PASS foo(i, i + 1) is 27
+PASS foo(i, i + 1) is 29
+PASS foo(i, i + 1) is 31
+PASS foo(i, i + 1) is 33
+PASS foo(i, i + 1) is 35
+PASS foo(i, i + 1) is 37
+PASS foo(i, i + 1) is 39
+PASS foo(i, i + 1) is 41
+PASS foo(i, i + 1) is 43
+PASS foo(i, i + 1) is 45
+PASS foo(i, i + 1) is 47
+PASS foo(i, i + 1) is 49
+PASS foo(i, i + 1) is 51
+PASS foo(i, i + 1) is 53
+PASS foo(i, i + 1) is 55
+PASS foo(i, i + 1) is 57
+PASS foo(i, i + 1) is 59
+PASS foo(i, i + 1) is 61
+PASS foo(i, i + 1) is 63
+PASS foo(i, i + 1) is 65
+PASS foo(i, i + 1) is 67
+PASS foo(i, i + 1) is 69
+PASS foo(i, i + 1) is 71
+PASS foo(i, i + 1) is 73
+PASS foo(i, i + 1) is 75
+PASS foo(i, i + 1) is 77
+PASS foo(i, i + 1) is 79
+PASS foo(i, i + 1) is 81
+PASS foo(i, i + 1) is 83
+PASS foo(i, i + 1) is 85
+PASS foo(i, i + 1) is 87
+PASS foo(i, i + 1) is 89
+PASS foo(i, i + 1) is 91
+PASS foo(i, i + 1) is 93
+PASS foo(i, i + 1) is 95
+PASS foo(i, i + 1) is 97
+PASS foo(i, i + 1) is 99
+PASS foo(i, i + 1) is 101
+PASS foo(i, i + 1) is 103
+PASS foo(i, i + 1) is 105
+PASS foo(i, i + 1) is 107
+PASS foo(i, i + 1) is 109
+PASS foo(i, i + 1) is 111
+PASS foo(i, i + 1) is 113
+PASS foo(i, i + 1) is 115
+PASS foo(i, i + 1) is 117
+PASS foo(i, i + 1) is 119
+PASS foo(i, i + 1) is 121
+PASS foo(i, i + 1) is 123
+PASS foo(i, i + 1) is 125
+PASS foo(i, i + 1) is 127
+PASS foo(i, i + 1) is 129
+PASS foo(i, i + 1) is 131
+PASS foo(i, i + 1) is 133
+PASS foo(i, i + 1) is 135
+PASS foo(i, i + 1) is 137
+PASS foo(i, i + 1) is 139
+PASS foo(i, i + 1) is 141
+PASS foo(i, i + 1) is 143
+PASS foo(i, i + 1) is 145
+PASS foo(i, i + 1) is 147
+PASS foo(i, i + 1) is 149
+PASS foo(i, i + 1) is 151
+PASS foo(i, i + 1) is 153
+PASS foo(i, i + 1) is 155
+PASS foo(i, i + 1) is 157
+PASS foo(i, i + 1) is 159
+PASS foo(i, i + 1) is 161
+PASS foo(i, i + 1) is 163
+PASS foo(i, i + 1) is 165
+PASS foo(i, i + 1) is 167
+PASS foo(i, i + 1) is 169
+PASS foo(i, i + 1) is 171
+PASS foo(i, i + 1) is 173
+PASS foo(i, i + 1) is 175
+PASS foo(i, i + 1) is 177
+PASS foo(i, i + 1) is 179
+PASS foo(i, i + 1) is 181
+PASS foo(i, i + 1) is 183
+PASS foo(i, i + 1) is 185
+PASS foo(i, i + 1) is 187
+PASS foo(i, i + 1) is 189
+PASS foo(i, i + 1) is 191
+PASS foo(i, i + 1) is 193
+PASS foo(i, i + 1) is 195
+PASS foo(i, i + 1) is 197
+PASS foo(i, i + 1) is 199
+PASS foo(i, i + 1) is 201
+PASS foo(i, i + 1) is 203
+PASS foo(i, i + 1) is 205
+PASS foo(i, i + 1) is 207
+PASS foo(i, i + 1) is 209
+PASS foo(i, i + 1) is 211
+PASS foo(i, i + 1) is 213
+PASS foo(i, i + 1) is 215
+PASS foo(i, i + 1) is 217
+PASS foo(i, i + 1) is 219
+PASS foo(i, i + 1) is 221
+PASS foo(i, i + 1) is 223
+PASS foo(i, i + 1) is 225
+PASS foo(i, i + 1) is 227
+PASS foo(i, i + 1) is 229
+PASS foo(i, i + 1) is 231
+PASS foo(i, i + 1) is 233
+PASS foo(i, i + 1) is 235
+PASS foo(i, i + 1) is 237
+PASS foo(i, i + 1) is 239
+PASS foo(i, i + 1) is 241
+PASS foo(i, i + 1) is 243
+PASS foo(i, i + 1) is 245
+PASS foo(i, i + 1) is 247
+PASS foo(i, i + 1) is 249
+PASS foo(i, i + 1) is 251
+PASS foo(i, i + 1) is 253
+PASS foo(i, i + 1) is 255
+PASS foo(i, i + 1) is 257
+PASS foo(i, i + 1) is 259
+PASS foo(i, i + 1) is 261
+PASS foo(i, i + 1) is 263
+PASS foo(i, i + 1) is 265
+PASS foo(i, i + 1) is 267
+PASS foo(i, i + 1) is 269
+PASS foo(i, i + 1) is 271
+PASS foo(i, i + 1) is 273
+PASS foo(i, i + 1) is 275
+PASS foo(i, i + 1) is 277
+PASS foo(i, i + 1) is 279
+PASS foo(i, i + 1) is 281
+PASS foo(i, i + 1) is 283
+PASS foo(i, i + 1) is 285
+PASS foo(i, i + 1) is 287
+PASS foo(i, i + 1) is 289
+PASS foo(i, i + 1) is 291
+PASS foo(i, i + 1) is 293
+PASS foo(i, i + 1) is 295
+PASS foo(i, i + 1) is 297
+PASS foo(i, i + 1) is 299
+PASS foo(i, i + 1) is 301
+PASS foo(i, i + 1) is 303
+PASS foo(i, i + 1) is 305
+PASS foo(i, i + 1) is 307
+PASS foo(i, i + 1) is 309
+PASS foo(i, i + 1) is 311
+PASS foo(i, i + 1) is 313
+PASS foo(i, i + 1) is 315
+PASS foo(i, i + 1) is 317
+PASS foo(i, i + 1) is 319
+PASS foo(i, i + 1) is 321
+PASS foo(i, i + 1) is 323
+PASS foo(i, i + 1) is 325
+PASS foo(i, i + 1) is 327
+PASS foo(i, i + 1) is 329
+PASS foo(i, i + 1) is 331
+PASS foo(i, i + 1) is 333
+PASS foo(i, i + 1) is 335
+PASS foo(i, i + 1) is 337
+PASS foo(i, i + 1) is 339
+PASS foo(i, i + 1) is 341
+PASS foo(i, i + 1) is 343
+PASS foo(i, i + 1) is 345
+PASS foo(i, i + 1) is 347
+PASS foo(i, i + 1) is 349
+PASS foo(i, i + 1) is 351
+PASS foo(i, i + 1) is 353
+PASS foo(i, i + 1) is 355
+PASS foo(i, i + 1) is 357
+PASS foo(i, i + 1) is 359
+PASS foo(i, i + 1) is 361
+PASS foo(i, i + 1) is 363
+PASS foo(i, i + 1) is 365
+PASS foo(i, i + 1) is 367
+PASS foo(i, i + 1) is 369
+PASS foo(i, i + 1) is 371
+PASS foo(i, i + 1) is 373
+PASS foo(i, i + 1) is 375
+PASS foo(i, i + 1) is 377
+PASS foo(i, i + 1) is 379
+PASS foo(i, i + 1) is 381
+PASS foo(i, i + 1) is 383
+PASS foo(i, i + 1) is 385
+PASS foo(i, i + 1) is 387
+PASS foo(i, i + 1) is 389
+PASS foo(i, i + 1) is 391
+PASS foo(i, i + 1) is 393
+PASS foo(i, i + 1) is 395
+PASS foo(i, i + 1) is 397
+PASS foo(i, i + 1) is 399
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arguments-alias-one-block-osr-exit-expected.txt b/test/webkit/dfg-arguments-alias-one-block-osr-exit-expected.txt
new file mode 100644 (file)
index 0000000..76dc0ca
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that if you alias the arguments in a very small function, arguments simplification still works even if you OSR exit.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is "47101316192225283134374043464952555861646770737679828588919497100103106109112115118121124127130133136139142145148151154157160163166169172175178181184187190193196199202205208211214217220223226229232235238241244247250253256259262265268271274277280283286289292295298301304307310313316319322325328331334337340343346349352355358361364367370373376379382385388391394397400403406409412415418421424427430433436439442445448451454457460463466469472475478481484487490493496499502505508511514517520523526529532535538541544547550553556559562565568571574577580583586589592595598601hello201203hello202204hello203205hello204206hello205207hello206208hello207209hello208210hello209211hello210212hello211213hello212214hello213215hello214216hello215217hello216218hello217219hello218220hello219221hello220222hello221223hello222224hello223225hello224226hello225227hello226228hello227229hello228230hello229231hello230232hello231233hello232234hello233235hello234236hello235237hello236238hello237239hello238240hello239241hello240242hello241243hello242244hello243245hello244246hello245247hello246248hello247249hello248250hello249251hello250252hello251253hello252254hello253255hello254256hello255257hello256258hello257259hello258260hello259261hello260262hello261263hello262264hello263265hello264266hello265267hello266268hello267269hello268270hello269271hello270272hello271273hello272274hello273275hello274276hello275277hello276278hello277279hello278280hello279281hello280282hello281283hello282284hello283285hello284286hello285287hello286288hello287289hello288290hello289291hello290292hello291293hello292294hello293295hello294296hello295297hello296298hello297299hello298300hello299301hello300302"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arguments-alias-one-block-osr-exit.js b/test/webkit/dfg-arguments-alias-one-block-osr-exit.js
new file mode 100644 (file)
index 0000000..dbf381b
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that if you alias the arguments in a very small function, arguments simplification still works even if you OSR exit."
+);
+
+function foo() {
+    var args = arguments;
+    return args[0] + args[1] + args[2];
+}
+
+var result = "";
+for (var i = 0; i < 300; ++i) {
+    var a;
+    if (i < 200)
+        a = i;
+    else
+        a = "hello";
+    var b = i + 1;
+    var c = i + 3;
+    result += foo(a, b, c);
+}
+
+shouldBe("result", "\"47101316192225283134374043464952555861646770737679828588919497100103106109112115118121124127130133136139142145148151154157160163166169172175178181184187190193196199202205208211214217220223226229232235238241244247250253256259262265268271274277280283286289292295298301304307310313316319322325328331334337340343346349352355358361364367370373376379382385388391394397400403406409412415418421424427430433436439442445448451454457460463466469472475478481484487490493496499502505508511514517520523526529532535538541544547550553556559562565568571574577580583586589592595598601hello201203hello202204hello203205hello204206hello205207hello206208hello207209hello208210hello209211hello210212hello211213hello212214hello213215hello214216hello215217hello216218hello217219hello218220hello219221hello220222hello221223hello222224hello223225hello224226hello225227hello226228hello227229hello228230hello229231hello230232hello231233hello232234hello233235hello234236hello235237hello236238hello237239hello238240hello239241hello240242hello241243hello242244hello243245hello244246hello245247hello246248hello247249hello248250hello249251hello250252hello251253hello252254hello253255hello254256hello255257hello256258hello257259hello258260hello259261hello260262hello261263hello262264hello263265hello264266hello265267hello266268hello267269hello268270hello269271hello270272hello271273hello272274hello273275hello274276hello275277hello276278hello277279hello278280hello279281hello280282hello281283hello282284hello283285hello284286hello285287hello286288hello287289hello288290hello289291hello290292hello291293hello292294hello293295hello294296hello295297hello296298hello297299hello298300hello299301hello300302\"");
diff --git a/test/webkit/dfg-arguments-alias-one-block-overwrite-arguments-expected.txt b/test/webkit/dfg-arguments-alias-one-block-overwrite-arguments-expected.txt
new file mode 100644 (file)
index 0000000..1b0ff6b
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that if you alias the arguments in a very small function, arguments simplification still works even if you overwrite the arguments register.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is "579111315171921232527293133353739414345474951535557596163656769717375777981838587899193959799101103105107109111113115117119121123125127129131133135137139141143145147149151153155157159161163165167169171173175177179181183185187189191193195197199201203205207209211213215217219221223225227229231233235237239241243245247249251253255257259261263265267269271273275277279281283285287289291293295297299301303305307309311313315317319321323325327329331333335337339341343345347349351353355357359361363365367369371373375377379381383385387389391393395397399401403hello2203hello2204hello2205hello2206hello2207hello2208hello2209hello2210hello2211hello2212hello2213hello2214hello2215hello2216hello2217hello2218hello2219hello2220hello2221hello2222hello2223hello2224hello2225hello2226hello2227hello2228hello2229hello2230hello2231hello2232hello2233hello2234hello2235hello2236hello2237hello2238hello2239hello2240hello2241hello2242hello2243hello2244hello2245hello2246hello2247hello2248hello2249hello2250hello2251hello2252hello2253hello2254hello2255hello2256hello2257hello2258hello2259hello2260hello2261hello2262hello2263hello2264hello2265hello2266hello2267hello2268hello2269hello2270hello2271hello2272hello2273hello2274hello2275hello2276hello2277hello2278hello2279hello2280hello2281hello2282hello2283hello2284hello2285hello2286hello2287hello2288hello2289hello2290hello2291hello2292hello2293hello2294hello2295hello2296hello2297hello2298hello2299hello2300hello2301hello2302"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arguments-alias-one-block-overwrite-arguments.js b/test/webkit/dfg-arguments-alias-one-block-overwrite-arguments.js
new file mode 100644 (file)
index 0000000..b94638f
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that if you alias the arguments in a very small function, arguments simplification still works even if you overwrite the arguments register."
+);
+
+function foo() {
+    var args = arguments;
+    arguments = [1, 2, 3];
+    return args[0] + arguments[1] + args[2];
+}
+
+var result = "";
+for (var i = 0; i < 300; ++i) {
+    var a;
+    if (i < 200)
+        a = i;
+    else
+        a = "hello";
+    var b = i + 1;
+    var c = i + 3;
+    result += foo(a, b, c);
+}
+shouldBe("result", "\"579111315171921232527293133353739414345474951535557596163656769717375777981838587899193959799101103105107109111113115117119121123125127129131133135137139141143145147149151153155157159161163165167169171173175177179181183185187189191193195197199201203205207209211213215217219221223225227229231233235237239241243245247249251253255257259261263265267269271273275277279281283285287289291293295297299301303305307309311313315317319321323325327329331333335337339341343345347349351353355357359361363365367369371373375377379381383385387389391393395397399401403hello2203hello2204hello2205hello2206hello2207hello2208hello2209hello2210hello2211hello2212hello2213hello2214hello2215hello2216hello2217hello2218hello2219hello2220hello2221hello2222hello2223hello2224hello2225hello2226hello2227hello2228hello2229hello2230hello2231hello2232hello2233hello2234hello2235hello2236hello2237hello2238hello2239hello2240hello2241hello2242hello2243hello2244hello2245hello2246hello2247hello2248hello2249hello2250hello2251hello2252hello2253hello2254hello2255hello2256hello2257hello2258hello2259hello2260hello2261hello2262hello2263hello2264hello2265hello2266hello2267hello2268hello2269hello2270hello2271hello2272hello2273hello2274hello2275hello2276hello2277hello2278hello2279hello2280hello2281hello2282hello2283hello2284hello2285hello2286hello2287hello2288hello2289hello2290hello2291hello2292hello2293hello2294hello2295hello2296hello2297hello2298hello2299hello2300hello2301hello2302\"");
diff --git a/test/webkit/dfg-arguments-alias-one-block-overwrite-expected.txt b/test/webkit/dfg-arguments-alias-one-block-overwrite-expected.txt
new file mode 100644 (file)
index 0000000..ffc2308
--- /dev/null
@@ -0,0 +1,332 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that if you alias the arguments in a very small function, arguments simplification still works even if the variable isn't must-aliased.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS foo(a, b, c) is 6
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arguments-alias-one-block-overwrite.js b/test/webkit/dfg-arguments-alias-one-block-overwrite.js
new file mode 100644 (file)
index 0000000..e94ad8b
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that if you alias the arguments in a very small function, arguments simplification still works even if the variable isn't must-aliased."
+);
+
+function foo() {
+    var args = arguments;
+    args = [1, 2, 3];
+    return args[0] + args[1] + args[2];
+}
+
+var result = "";
+for (var i = 0; i < 300; ++i) {
+    var a;
+    if (i < 200)
+        a = i;
+    else
+        a = "hello";
+    var b = i + 1;
+    var c = i + 3;
+    shouldBe("foo(a, b, c)", "6");
+}
+
diff --git a/test/webkit/dfg-arguments-alias-one-block.js b/test/webkit/dfg-arguments-alias-one-block.js
new file mode 100644 (file)
index 0000000..46ed444
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that if you alias the arguments in a very small function, arguments simplification still works."
+);
+
+function foo() {
+    var args = arguments;
+    return args[0] + args[1];
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(i, i + 1)", "" + (i + i + 1));
diff --git a/test/webkit/dfg-arguments-alias.js b/test/webkit/dfg-arguments-alias.js
new file mode 100644 (file)
index 0000000..c30fe89
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests aliased uses of 'arguments'."
+);
+
+function foo() {
+    var result = 0;
+    var a = arguments;
+    for (var i = 0; i < a.length; ++i)
+        result += a[i];
+    return result;
+}
+
+function bar(x) {
+    return foo(x);
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("bar(42)", "42");
+
diff --git a/test/webkit/dfg-arguments-cross-code-origin-expected.txt b/test/webkit/dfg-arguments-cross-code-origin-expected.txt
new file mode 100644 (file)
index 0000000..08d699d
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests uses of 'arguments' that are aliased but span code origins.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS baz(42) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arguments-cross-code-origin.js b/test/webkit/dfg-arguments-cross-code-origin.js
new file mode 100644 (file)
index 0000000..0793dfa
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests uses of 'arguments' that are aliased but span code origins."
+);
+
+function foo() {
+    return arguments;
+}
+
+function bar(a) {
+    var result = 0;
+    for (var i = 0; i < a.length; ++i)
+        result += a[i];
+    return result;
+}
+
+function baz(x) {
+    return bar(foo(x));
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("baz(42)", "42");
diff --git a/test/webkit/dfg-arguments-mixed-alias-expected.txt b/test/webkit/dfg-arguments-mixed-alias-expected.txt
new file mode 100644 (file)
index 0000000..16481ca
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests functions that use 'arguments' in both an aliased and a non-aliased way.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS bar(42) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arguments-mixed-alias.js b/test/webkit/dfg-arguments-mixed-alias.js
new file mode 100644 (file)
index 0000000..477eac3
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests functions that use 'arguments' in both an aliased and a non-aliased way."
+);
+
+function foo() {
+    var result = 0;
+    var a = arguments;
+    for (var i = 0; i < a.length; ++i)
+        result += arguments[i];
+    return result;
+}
+
+function bar(x) {
+    return foo(x);
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("bar(42)", "42");
+
diff --git a/test/webkit/dfg-arguments-osr-exit-expected.txt b/test/webkit/dfg-arguments-osr-exit-expected.txt
new file mode 100644 (file)
index 0000000..0b83ec1
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests aliased uses of 'arguments' that require reification of the Arguments object on OSR exit.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arguments-osr-exit-multiple-blocks-before-exit-expected.txt b/test/webkit/dfg-arguments-osr-exit-multiple-blocks-before-exit-expected.txt
new file mode 100644 (file)
index 0000000..f1c6657
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests aliased uses of 'arguments' that require reification of the Arguments object on OSR exit, in the case that there is some interesting control flow prior to the exit.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arguments-osr-exit-multiple-blocks-before-exit.js b/test/webkit/dfg-arguments-osr-exit-multiple-blocks-before-exit.js
new file mode 100644 (file)
index 0000000..8acf9c3
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests aliased uses of 'arguments' that require reification of the Arguments object on OSR exit, in the case that there is some interesting control flow prior to the exit."
+);
+
+function baz() {
+    return [variable];
+}
+
+var someThing = 0;
+
+function foo() {
+    var result = 0;
+    var a = arguments;
+    for (var i = 0; i < a.length; ++i) {
+        // Just some dummy control flow.
+        if (someThing < 0)
+            throw "Error";
+
+        result += a[i];
+        result += baz()[0];
+    }
+    return result;
+}
+
+function bar(x) {
+    return foo(x);
+}
+
+var variable = 32;
+var expected = "74";
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150) {
+        variable = "32";
+        expected = "\"4232\"";
+    }
+
+    shouldBe("bar(42)", expected);
+}
diff --git a/test/webkit/dfg-arguments-osr-exit-multiple-blocks-expected.txt b/test/webkit/dfg-arguments-osr-exit-multiple-blocks-expected.txt
new file mode 100644 (file)
index 0000000..7e413fe
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests aliased uses of 'arguments' that require reification of the Arguments object on OSR exit, in the case that there is some interesting control flow.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is 74
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS bar(42) is "4232"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arguments-osr-exit-multiple-blocks.js b/test/webkit/dfg-arguments-osr-exit-multiple-blocks.js
new file mode 100644 (file)
index 0000000..bc52cc6
--- /dev/null
@@ -0,0 +1,60 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests aliased uses of 'arguments' that require reification of the Arguments object on OSR exit, in the case that there is some interesting control flow."
+);
+
+function baz() {
+    return [variable];
+}
+
+function foo() {
+    var result = 0;
+    var a = arguments;
+    for (var i = 0; i < a.length; ++i) {
+        result += a[i];
+        result += baz()[0];
+
+        // Just some dummy control flow.
+        if (result < 0)
+            throw "Error";
+    }
+    return result;
+}
+
+function bar(x) {
+    return foo(x);
+}
+
+var variable = 32;
+var expected = "74";
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150) {
+        variable = "32";
+        expected = "\"4232\"";
+    }
+
+    shouldBe("bar(42)", expected);
+}
diff --git a/test/webkit/dfg-arguments-osr-exit.js b/test/webkit/dfg-arguments-osr-exit.js
new file mode 100644 (file)
index 0000000..c7a7d95
--- /dev/null
@@ -0,0 +1,56 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests aliased uses of 'arguments' that require reification of the Arguments object on OSR exit."
+);
+
+function baz() {
+    return [variable];
+}
+
+function foo() {
+    var result = 0;
+    var a = arguments;
+    for (var i = 0; i < a.length; ++i) {
+        result += a[i];
+        result += baz()[0];
+    }
+    return result;
+}
+
+function bar(x) {
+    return foo(x);
+}
+
+var variable = 32;
+var expected = "74";
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150) {
+        variable = "32";
+        expected = "\"4232\"";
+    }
+
+    shouldBe("bar(42)", expected);
+}
diff --git a/test/webkit/dfg-arguments-out-of-bounds-expected.txt b/test/webkit/dfg-arguments-out-of-bounds-expected.txt
new file mode 100644 (file)
index 0000000..2680386
--- /dev/null
@@ -0,0 +1,3032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests accessing arguments with an out-of-bounds index when the arguments have not been created but might be.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "42"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arguments-out-of-bounds.js b/test/webkit/dfg-arguments-out-of-bounds.js
new file mode 100644 (file)
index 0000000..8774d2c
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests accessing arguments with an out-of-bounds index when the arguments have not been created but might be."
+);
+
+var p = false;
+
+function foo() {
+    function bar() { }
+    if (p)
+        return arguments;
+    return arguments[0];
+}
+
+var args = [42];
+var expected = "\"42\"";
+for (var i = 0; i < 3000; ++i) {
+    if (i == 1000) {
+        p = true;
+        expected = "\"[object Arguments]\"";
+    }
+    if (i == 2000) {
+        args = [];
+        p = false;
+        expected = "\"undefined\"";
+    }
+    result = "" +foo.apply(void 0, args);
+    shouldBe("result", expected);
+}
+
diff --git a/test/webkit/dfg-arguments-unexpected-escape-expected.txt b/test/webkit/dfg-arguments-unexpected-escape-expected.txt
new file mode 100644 (file)
index 0000000..c9827fa
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests aliased uses of 'arguments' that have an unexpected escape.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS bar(42) is 84
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arguments-unexpected-escape.js b/test/webkit/dfg-arguments-unexpected-escape.js
new file mode 100644 (file)
index 0000000..9dbf020
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests aliased uses of 'arguments' that have an unexpected escape."
+);
+
+function baz() {
+    return foo.arguments;
+}
+
+function foo() {
+    var result = 0;
+    var a = arguments;
+    for (var i = 0; i < a.length; ++i) {
+        result += a[i];
+        result += baz()[0];
+    }
+    return result;
+}
+
+function bar(x) {
+    return foo(x);
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("bar(42)", "84");
diff --git a/test/webkit/dfg-arith-add-overflow-check-elimination-predicted-but-not-proven-int-expected.txt b/test/webkit/dfg-arith-add-overflow-check-elimination-predicted-but-not-proven-int-expected.txt
new file mode 100644 (file)
index 0000000..f1cb1da
--- /dev/null
@@ -0,0 +1,140 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that when values predicted but not proven int are used in a tower of additions, we don't eliminate the overflow check unsoundly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(1, 2, {f:3}) is 6
+PASS bar(2147483645, 2147483644, {f:9007199254740990}) is -8
+PASS bar(2147483643, 2147483643, {f:18014398509481980}) is -16
+PASS bar(2147483643, 2147483642, {f:36028797018963960}) is -16
+PASS bar(2147483642, 2147483642, {f:36028797018963960}) is -16
+PASS bar(2147483641, 2147483640, {f:144115188075855840}) is -32
+PASS bar(2147483640, 2147483640, {f:144115188075855840}) is -64
+PASS bar(2147483640, 2147483639, {f:288230376151711680}) is -64
+PASS bar(2147483639, 2147483639, {f:288230376151711680}) is -64
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arith-add-overflow-check-elimination-predicted-but-not-proven-int.js b/test/webkit/dfg-arith-add-overflow-check-elimination-predicted-but-not-proven-int.js
new file mode 100644 (file)
index 0000000..54c049f
--- /dev/null
@@ -0,0 +1,67 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that when values predicted but not proven int are used in a tower of additions, we don't eliminate the overflow check unsoundly."
+);
+
+function foo(a, b, o) {
+    return (a + b + o.f) | 0;
+}
+
+function bar(a, b, o) {
+    eval(""); // Prevent this function from being opt compiled.
+    return foo(a, b, o);
+}
+
+var badCases = [
+    {a:2147483645, b:2147483644, c:9007199254740990, expected:-8},
+    {a:2147483643, b:2147483643, c:18014398509481980, expected:-16},
+    {a:2147483643, b:2147483642, c:36028797018963960, expected:-16},
+    {a:2147483642, b:2147483642, c:36028797018963960, expected:-16},
+    {a:2147483641, b:2147483640, c:144115188075855840, expected:-32},
+    {a:2147483640, b:2147483640, c:144115188075855840, expected:-64},
+    {a:2147483640, b:2147483639, c:288230376151711680, expected:-64},
+    {a:2147483639, b:2147483639, c:288230376151711680, expected:-64}
+];
+
+var warmup = 100;
+
+for (var i = 0; i < warmup + badCases.length; ++i) {
+    var a, b, c;
+    var expected;
+    if (i < warmup) {
+        a = 1;
+        b = 2;
+        c = 3;
+        expected = 6;
+    } else {
+        var current = badCases[i - warmup];
+        a = current.a;
+        b = current.b;
+        c = current.c;
+        expected = current.expected;
+    }
+    shouldBe("bar(" + a + ", " + b + ", {f:" + c + "})", "" + expected);
+}
+
diff --git a/test/webkit/dfg-arith-add-overflow-check-elimination-tower-of-large-numbers-expected.txt b/test/webkit/dfg-arith-add-overflow-check-elimination-tower-of-large-numbers-expected.txt
new file mode 100644 (file)
index 0000000..a99cdb5
--- /dev/null
@@ -0,0 +1,233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that if we have a tower of large numerical constants being added to each other, the DFG knows that a sufficiently large tower may produce a large enough value that overflow check elimination must be careful.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(1, 2) is 0
+PASS bar(2147483645, 2147483644) is -10
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arith-add-overflow-check-elimination-tower-of-large-numbers.js b/test/webkit/dfg-arith-add-overflow-check-elimination-tower-of-large-numbers.js
new file mode 100644 (file)
index 0000000..292926e
--- /dev/null
@@ -0,0 +1,60 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that if we have a tower of large numerical constants being added to each other, the DFG knows that a sufficiently large tower may produce a large enough value that overflow check elimination must be careful."
+);
+
+function foo(a, b) {
+    return (a + b + 281474976710655 + 281474976710655 + 281474976710655 + 281474976710655 +
+            281474976710655 + 281474976710655 + 281474976710655 + 281474976710655 +
+            281474976710655 + 281474976710655 + 281474976710655 + 281474976710655 +
+            281474976710655 + 281474976710655 + 281474976710655 + 281474976710655 +
+            281474976710655 + 281474976710655 + 281474976710655 + 281474976710655 +
+            281474976710655 + 281474976710655 + 281474976710655 + 281474976710655 +
+            281474976710655 + 281474976710655 + 281474976710655 + 281474976710655 +
+            281474976710655 + 281474976710655 + 281474976710655 + 281474976710655 + 30) | 0;
+}
+
+function bar(a, b, o) {
+    eval(""); // Prevent this function from being opt compiled.
+    return foo(a, b, o);
+}
+
+var warmup = 200;
+
+for (var i = 0; i < warmup + 1; ++i) {
+    var a, b, c;
+    var expected;
+    if (i < warmup) {
+        a = 1;
+        b = 2;
+        expected = 0;
+    } else {
+        a = 2147483645;
+        b = 2147483644;
+        expected = -10;
+    }
+    shouldBe("bar(" + a + ", " + b + ")", "" + expected);
+}
+
diff --git a/test/webkit/dfg-array-dead-expected.txt b/test/webkit/dfg-array-dead-expected.txt
new file mode 100644 (file)
index 0000000..26dd76c
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that an array being dead does not result in register allocation failures.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS foo() is 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-array-dead.js b/test/webkit/dfg-array-dead.js
new file mode 100644 (file)
index 0000000..a627617
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that an array being dead does not result in register allocation failures."
+);
+
+function foo() {
+    var z = new Array(00, 01, 02, 03, 04, 05, 06, 07, 08, 09,
+                      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, 69);
+
+    z = bar(1);
+
+    return z.length;
+}
+
+function bar(x) {
+    var a = [];
+    a[x] = 1;
+
+    return a;
+}
+
+for (var i = 0; i < 1000; ++i) {
+    shouldBe("foo()", "2");
+}
+
diff --git a/test/webkit/dfg-array-length-dead-expected.txt b/test/webkit/dfg-array-length-dead-expected.txt
new file mode 100644 (file)
index 0000000..8582151
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that an array length access being dead does not result in register allocation failures.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS foo({f:[]}) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-array-length-dead.js b/test/webkit/dfg-array-length-dead.js
new file mode 100644 (file)
index 0000000..5256fe1
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that an array length access being dead does not result in register allocation failures."
+);
+
+function foo(x) {
+    var y = x.f.length;
+    return 42;
+}
+
+for (var i = 0; i < 1000; ++i) {
+    shouldBe("foo({f:[]})", "42");
+}
+
diff --git a/test/webkit/dfg-array-pop-side-effects-expected.txt b/test/webkit/dfg-array-pop-side-effects-expected.txt
new file mode 100644 (file)
index 0000000..907b72f
--- /dev/null
@@ -0,0 +1,283 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that ArrayPop is known to the DFG to be a side effect.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+PASS foo(a, b) is 45
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+Ouch!
+PASS foo(a, b) is 0/0
+PASS ouches is 50
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-array-pop-side-effects.js b/test/webkit/dfg-array-pop-side-effects.js
new file mode 100644 (file)
index 0000000..8d4d5f3
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that ArrayPop is known to the DFG to be a side effect."
+);
+
+function foo(a, b) {
+    var result = a.f;
+    result += b.pop();
+    result += a.g;
+    return result;
+}
+
+var ouches = 0;
+for (var i = 0; i < 200; ++i) {
+    var a = {f:1, g:2};
+    var b = [];
+    var expected;
+    if (i < 150) {
+        // Ensure that we always transition the array's structure to one that indicates
+        // that we have array storage.
+        b.__defineGetter__("0", function() {
+            testFailed("Should never get here");
+        });
+        b.length = 0;
+        b[0] = 42;
+        expected = "45";
+    } else {
+        b.__defineGetter__("0", function() {
+            debug("Ouch!");
+            ouches++;
+            delete a.g;
+            a.h = 43;
+            return 5;
+        });
+        expected = "0/0";
+    }
+    shouldBe("foo(a, b)", expected);
+}
+
+shouldBe("ouches", "50");
diff --git a/test/webkit/dfg-array-pop-value-clearing-expected.txt b/test/webkit/dfg-array-pop-value-clearing-expected.txt
new file mode 100644 (file)
index 0000000..d349201
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that array popping properly cleans up the popped element.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS foo([1, 2]) is [2,42,,]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-array-pop-value-clearing.js b/test/webkit/dfg-array-pop-value-clearing.js
new file mode 100644 (file)
index 0000000..6ea310a
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that array popping properly cleans up the popped element."
+);
+
+function foo(a) {
+    var x = a.pop();
+    a[a.length + 1] = 42;
+    return [x, a.pop(), a.pop()];
+}
+
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo([1, 2])", "[2,42,,]");
diff --git a/test/webkit/dfg-arrayify-elimination-expected.txt b/test/webkit/dfg-arrayify-elimination-expected.txt
new file mode 100644 (file)
index 0000000..a5c148e
--- /dev/null
@@ -0,0 +1,1027 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS array is [,42,43,44]
+PASS array is [52,42,43,44]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arrayify-elimination.js b/test/webkit/dfg-arrayify-elimination.js
new file mode 100644 (file)
index 0000000..3ac57d0
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+function foo(a, i, j, k) {
+    a[i] = 42;
+    a[j] = 43;
+    a[k] = 44;
+}
+
+for (var i = 0; i < 1000; ++i) {
+    var array = [];
+    if (i % 2)
+        array.unshift(52);
+    foo(array, 1, 2, 3);
+    if (i % 2)
+        shouldBe("array", "[52,42,43,44]");
+    else
+        shouldBe("array", "[,42,43,44]");
+}
diff --git a/test/webkit/dfg-arrayify-when-late-prevent-extensions-expected.txt b/test/webkit/dfg-arrayify-when-late-prevent-extensions-expected.txt
new file mode 100644 (file)
index 0000000..374c7c1
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that Arraify does good things when Object.preventExtensions() has been called.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is 42
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arrayify-when-late-prevent-extensions.js b/test/webkit/dfg-arrayify-when-late-prevent-extensions.js
new file mode 100644 (file)
index 0000000..3995068
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that Arraify does good things when Object.preventExtensions() has been called."
+);
+
+function foo(o) {
+    o[0] = 42;
+    return o[0];
+}
+
+for (var i = 0; i < 200; ++i) {
+    var o = {};
+    var expected;
+    if (i >= 150) {
+        Object.preventExtensions(o);
+        expected = "void 0";
+    } else
+        expected = "42";
+    shouldBe("foo(o)", expected);
+}
diff --git a/test/webkit/dfg-arrayify-when-prevent-extensions-expected.txt b/test/webkit/dfg-arrayify-when-prevent-extensions-expected.txt
new file mode 100644 (file)
index 0000000..3202136
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that Arraify does good things when Object.preventExtensions() has been called.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS foo(o) is void 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-arrayify-when-prevent-extensions.js b/test/webkit/dfg-arrayify-when-prevent-extensions.js
new file mode 100644 (file)
index 0000000..78fb6bf
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that Arraify does good things when Object.preventExtensions() has been called."
+);
+
+function foo(o) {
+    o[0] = 42;
+    return o[0];
+}
+
+for (var i = 0; i < 200; ++i) {
+    var o = {};
+    Object.preventExtensions(o);
+    shouldBe("foo(o)", "void 0");
+}
diff --git a/test/webkit/dfg-bool-to-int32-reuse-expected.txt b/test/webkit/dfg-bool-to-int32-reuse-expected.txt
new file mode 100644 (file)
index 0000000..f9fbfa6
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that using a value predicted boolean after it is converted to an int32 doesn't crash the compiler while causing bad code gen.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS foo(true) is [2, true]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-bool-to-int32-reuse.js b/test/webkit/dfg-bool-to-int32-reuse.js
new file mode 100644 (file)
index 0000000..8e7c72a
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that using a value predicted boolean after it is converted to an int32 doesn't crash the compiler while causing bad code gen."
+);
+
+function foo(x) {
+    return [x << 1, x];
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo(true)", "[2, true]");
diff --git a/test/webkit/dfg-branch-logical-not-peephole-around-osr-exit-expected.txt b/test/webkit/dfg-branch-logical-not-peephole-around-osr-exit-expected.txt
new file mode 100644 (file)
index 0000000..15f1e1f
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that our attempts to do peephole Branch(LogicalNot) optimization doesn't break OSR exit's ability to recover the value of LogicalNot.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 6
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 7
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 8
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 9
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 10
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 9
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 12
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 13
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 14
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 15
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 16
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 17
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 18
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 19
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 20
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 21
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 22
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 23
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 24
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 25
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 26
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 27
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 28
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 29
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 30
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 31
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 32
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 33
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 34
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 35
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 36
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 37
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 38
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 39
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 40
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 41
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 42
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 43
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 44
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 45
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 46
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 47
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 48
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 49
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 50
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 51
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 52
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 53
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 54
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 55
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 56
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 57
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 58
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 59
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 60
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 61
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 62
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 63
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 64
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 65
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 66
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 67
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 68
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 69
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 70
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 71
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 72
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 73
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 74
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 75
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 76
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 77
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 78
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 79
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 80
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 81
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 82
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 83
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 84
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 85
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 86
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 87
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 88
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 89
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 90
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 91
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 92
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 93
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 94
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 95
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 96
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 97
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 98
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 99
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 100
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 101
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 102
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 103
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 104
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 105
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 106
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 107
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 108
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 109
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 110
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 111
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 112
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 113
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 114
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 115
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 116
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 117
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 118
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 119
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 120
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 121
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 122
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 123
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 124
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 125
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 126
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 127
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 128
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 129
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 130
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 131
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 132
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 133
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 134
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 135
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 136
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 137
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 138
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 139
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 140
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 141
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 142
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 143
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 144
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 145
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 146
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 147
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 148
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 149
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 150
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 151
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 152
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 153
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 154
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 155
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 156
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 157
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 158
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 159
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 160
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 161
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 162
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 163
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 164
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 165
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 166
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 167
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 168
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 169
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 170
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 171
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 172
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 173
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 174
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 175
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 176
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 177
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 178
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 179
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 180
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 181
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 182
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 183
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 184
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 185
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 186
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 187
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 188
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 189
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 190
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 191
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 192
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 193
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 194
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 195
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 196
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 197
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 198
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 199
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 200
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 201
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 202
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 203
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 204
+PASS foo(i, 5, i == 199 ? 2147483647 : 5) is 2147483847
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-branch-logical-not-peephole-around-osr-exit.js b/test/webkit/dfg-branch-logical-not-peephole-around-osr-exit.js
new file mode 100644 (file)
index 0000000..ab0215e
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that our attempts to do peephole Branch(LogicalNot) optimization doesn't break OSR exit's ability to recover the value of LogicalNot."
+);
+
+function foo(a, b, c) {
+    var x = a !== b;
+    var result = a + c;
+    if (x)
+        result++;
+    else
+        result--;
+    return result;
+}
+
+for (var i = 0; i < 200; ++i) {
+    var expected = i + (i == 199 ? 2147483647 : 5) + (i !== 5 ? 1 : -1)
+    shouldBe("foo(i, 5, i == 199 ? 2147483647 : 5)", "" + expected);
+}
+
diff --git a/test/webkit/dfg-branch-not-fail-expected.txt b/test/webkit/dfg-branch-not-fail-expected.txt
new file mode 100644 (file)
index 0000000..3803065
--- /dev/null
@@ -0,0 +1,832 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Check that short-circuiting Branch(LogicalNot(@a)) and then failing speculation does not result in the branch being taken the wrong way.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS foo({f:True}) is 1
+PASS foo({f:False}) is 0
+PASS bar({f:True}) is 0
+PASS bar({f:False}) is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-branch-not-fail.js b/test/webkit/dfg-branch-not-fail.js
new file mode 100644 (file)
index 0000000..af7ba97
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Check that short-circuiting Branch(LogicalNot(@a)) and then failing speculation does not result in the branch being taken the wrong way."
+);
+
+function foo(a) {
+    if (a.f)
+        return 1;
+    return 0;
+}
+
+function bar(a) {
+    var b = !a.f;
+    if (b)
+        return 1;
+    return 0;
+}
+
+var True = true;
+var False = false;
+for (var i = 0; i < 200; ++i) {
+    var x;
+    if (i == 100) {
+        True = "string";
+        False = void 0;
+    }
+    shouldBe("foo({f:True})", "1");
+    shouldBe("foo({f:False})", "0");
+    shouldBe("bar({f:True})", "0");
+    shouldBe("bar({f:False})", "1");
+}
+
diff --git a/test/webkit/dfg-call-function-hit-watchpoint-expected.txt b/test/webkit/dfg-call-function-hit-watchpoint-expected.txt
new file mode 100644 (file)
index 0000000..fec96a9
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests correctness of function calls when the function is overwritten.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(i, i + 1) is 1
+PASS bar(i, i + 1) is 3
+PASS bar(i, i + 1) is 5
+PASS bar(i, i + 1) is 7
+PASS bar(i, i + 1) is 9
+PASS bar(i, i + 1) is 11
+PASS bar(i, i + 1) is 13
+PASS bar(i, i + 1) is 15
+PASS bar(i, i + 1) is 17
+PASS bar(i, i + 1) is 19
+PASS bar(i, i + 1) is 21
+PASS bar(i, i + 1) is 23
+PASS bar(i, i + 1) is 25
+PASS bar(i, i + 1) is 27
+PASS bar(i, i + 1) is 29
+PASS bar(i, i + 1) is 31
+PASS bar(i, i + 1) is 33
+PASS bar(i, i + 1) is 35
+PASS bar(i, i + 1) is 37
+PASS bar(i, i + 1) is 39
+PASS bar(i, i + 1) is 41
+PASS bar(i, i + 1) is 43
+PASS bar(i, i + 1) is 45
+PASS bar(i, i + 1) is 47
+PASS bar(i, i + 1) is 49
+PASS bar(i, i + 1) is 51
+PASS bar(i, i + 1) is 53
+PASS bar(i, i + 1) is 55
+PASS bar(i, i + 1) is 57
+PASS bar(i, i + 1) is 59
+PASS bar(i, i + 1) is 61
+PASS bar(i, i + 1) is 63
+PASS bar(i, i + 1) is 65
+PASS bar(i, i + 1) is 67
+PASS bar(i, i + 1) is 69
+PASS bar(i, i + 1) is 71
+PASS bar(i, i + 1) is 73
+PASS bar(i, i + 1) is 75
+PASS bar(i, i + 1) is 77
+PASS bar(i, i + 1) is 79
+PASS bar(i, i + 1) is 81
+PASS bar(i, i + 1) is 83
+PASS bar(i, i + 1) is 85
+PASS bar(i, i + 1) is 87
+PASS bar(i, i + 1) is 89
+PASS bar(i, i + 1) is 91
+PASS bar(i, i + 1) is 93
+PASS bar(i, i + 1) is 95
+PASS bar(i, i + 1) is 97
+PASS bar(i, i + 1) is 99
+PASS bar(i, i + 1) is 101
+PASS bar(i, i + 1) is 103
+PASS bar(i, i + 1) is 105
+PASS bar(i, i + 1) is 107
+PASS bar(i, i + 1) is 109
+PASS bar(i, i + 1) is 111
+PASS bar(i, i + 1) is 113
+PASS bar(i, i + 1) is 115
+PASS bar(i, i + 1) is 117
+PASS bar(i, i + 1) is 119
+PASS bar(i, i + 1) is 121
+PASS bar(i, i + 1) is 123
+PASS bar(i, i + 1) is 125
+PASS bar(i, i + 1) is 127
+PASS bar(i, i + 1) is 129
+PASS bar(i, i + 1) is 131
+PASS bar(i, i + 1) is 133
+PASS bar(i, i + 1) is 135
+PASS bar(i, i + 1) is 137
+PASS bar(i, i + 1) is 139
+PASS bar(i, i + 1) is 141
+PASS bar(i, i + 1) is 143
+PASS bar(i, i + 1) is 145
+PASS bar(i, i + 1) is 147
+PASS bar(i, i + 1) is 149
+PASS bar(i, i + 1) is 151
+PASS bar(i, i + 1) is 153
+PASS bar(i, i + 1) is 155
+PASS bar(i, i + 1) is 157
+PASS bar(i, i + 1) is 159
+PASS bar(i, i + 1) is 161
+PASS bar(i, i + 1) is 163
+PASS bar(i, i + 1) is 165
+PASS bar(i, i + 1) is 167
+PASS bar(i, i + 1) is 169
+PASS bar(i, i + 1) is 171
+PASS bar(i, i + 1) is 173
+PASS bar(i, i + 1) is 175
+PASS bar(i, i + 1) is 177
+PASS bar(i, i + 1) is 179
+PASS bar(i, i + 1) is 181
+PASS bar(i, i + 1) is 183
+PASS bar(i, i + 1) is 185
+PASS bar(i, i + 1) is 187
+PASS bar(i, i + 1) is 189
+PASS bar(i, i + 1) is 191
+PASS bar(i, i + 1) is 193
+PASS bar(i, i + 1) is 195
+PASS bar(i, i + 1) is 197
+PASS bar(i, i + 1) is 199
+PASS bar(i, i + 1) is 201
+PASS bar(i, i + 1) is 203
+PASS bar(i, i + 1) is 205
+PASS bar(i, i + 1) is 207
+PASS bar(i, i + 1) is 209
+PASS bar(i, i + 1) is 211
+PASS bar(i, i + 1) is 213
+PASS bar(i, i + 1) is 215
+PASS bar(i, i + 1) is 217
+PASS bar(i, i + 1) is 219
+PASS bar(i, i + 1) is 221
+PASS bar(i, i + 1) is 223
+PASS bar(i, i + 1) is 225
+PASS bar(i, i + 1) is 227
+PASS bar(i, i + 1) is 229
+PASS bar(i, i + 1) is 231
+PASS bar(i, i + 1) is 233
+PASS bar(i, i + 1) is 235
+PASS bar(i, i + 1) is 237
+PASS bar(i, i + 1) is 239
+PASS bar(i, i + 1) is 241
+PASS bar(i, i + 1) is 243
+PASS bar(i, i + 1) is 245
+PASS bar(i, i + 1) is 247
+PASS bar(i, i + 1) is 249
+PASS bar(i, i + 1) is 251
+PASS bar(i, i + 1) is 253
+PASS bar(i, i + 1) is 255
+PASS bar(i, i + 1) is 257
+PASS bar(i, i + 1) is 259
+PASS bar(i, i + 1) is 261
+PASS bar(i, i + 1) is 263
+PASS bar(i, i + 1) is 265
+PASS bar(i, i + 1) is 267
+PASS bar(i, i + 1) is 269
+PASS bar(i, i + 1) is 271
+PASS bar(i, i + 1) is 273
+PASS bar(i, i + 1) is 275
+PASS bar(i, i + 1) is 277
+PASS bar(i, i + 1) is 279
+PASS bar(i, i + 1) is 281
+PASS bar(i, i + 1) is 283
+PASS bar(i, i + 1) is 285
+PASS bar(i, i + 1) is 287
+PASS bar(i, i + 1) is 289
+PASS bar(i, i + 1) is 291
+PASS bar(i, i + 1) is 293
+PASS bar(i, i + 1) is 295
+PASS bar(i, i + 1) is 297
+PASS bar(i, i + 1) is 299
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS bar(i, i + 1) is -1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-call-function-hit-watchpoint.js b/test/webkit/dfg-call-function-hit-watchpoint.js
new file mode 100644 (file)
index 0000000..5a332c1
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests correctness of function calls when the function is overwritten."
+);
+
+function foo(a, b) {
+    return a + b;
+}
+
+function bar(a, b) {
+    return foo(a, b);
+}
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150)
+        foo = function(a, b) { return a - b; }
+    var expected;
+    if (i < 150)
+        expected = i + i + 1;
+    else
+        expected = -1;
+    shouldBe("bar(i, i + 1)", "" + expected);
+}
+
diff --git a/test/webkit/dfg-call-method-hit-watchpoint-expected.txt b/test/webkit/dfg-call-method-hit-watchpoint-expected.txt
new file mode 100644 (file)
index 0000000..7ac11fa
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests correctness of method calls when the prototype is changed.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 42
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS callFoo(o) is 56
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-call-method-hit-watchpoint.js b/test/webkit/dfg-call-method-hit-watchpoint.js
new file mode 100644 (file)
index 0000000..382f899
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests correctness of method calls when the prototype is changed."
+);
+
+function Thingy() {
+}
+
+Thingy.prototype = {
+    foo: function() {
+        return 42;
+    }
+};
+
+function callFoo(o) {
+    return o.foo();
+}
+
+var o = new Thingy();
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150)
+        Thingy.prototype.foo = function() { return 56; }
+    var expected;
+    if (i < 150)
+        expected = 42;
+    else
+        expected = 56;
+    shouldBe("callFoo(o)", "" + expected);
+}
+
diff --git a/test/webkit/dfg-captured-var-get-local-expected.txt b/test/webkit/dfg-captured-var-get-local-expected.txt
new file mode 100644 (file)
index 0000000..90491d4
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that GetLocals on captured variables aren't eliminated too aggressively.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-captured-var-get-local.js b/test/webkit/dfg-captured-var-get-local.js
new file mode 100644 (file)
index 0000000..4abac74
--- /dev/null
@@ -0,0 +1,101 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that GetLocals on captured variables aren't eliminated too aggressively."
+);
+
+function foo() {
+    var x;
+    (function(){
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+        x = 42;
+    })();
+    var y = x;
+    return y;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo()", "42");
diff --git a/test/webkit/dfg-cfa-merge-with-dead-use-at-tail-expected.txt b/test/webkit/dfg-cfa-merge-with-dead-use-at-tail-expected.txt
new file mode 100644 (file)
index 0000000..175dd60
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a dead use of a variable at the tail of a basic block doesn't confuse the CFA into believing that the variable being used is dead as well.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS foo(false, true, 5) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-cfa-merge-with-dead-use-at-tail.js b/test/webkit/dfg-cfa-merge-with-dead-use-at-tail.js
new file mode 100644 (file)
index 0000000..ab9f2a5
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a dead use of a variable at the tail of a basic block doesn't confuse the CFA into believing that the variable being used is dead as well."
+);
+
+function foo(p, q, v) {
+    var x, y;
+    if (p)
+        x = 0;
+    else {
+        if (q)
+            x = v;
+        else
+            x = 0;
+        y = x;
+    }
+    if (x)
+        return 42;
+    return 0;
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(false, true, 5)", "42");
diff --git a/test/webkit/dfg-cfa-prove-put-by-id-simple-when-storing-to-specialized-function-expected.txt b/test/webkit/dfg-cfa-prove-put-by-id-simple-when-storing-to-specialized-function-expected.txt
new file mode 100644 (file)
index 0000000..41b9b88
--- /dev/null
@@ -0,0 +1,234 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Checks that the DFG CFA does the right things if it proves that a put_by_id is a simple replace when storing to a specialized function property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+baz!
+PASS bar.call({f:baz}, baz) is "baz"
+fuzz!
+PASS bar.call({f:baz}, fuzz) is "fuzz"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-cfa-prove-put-by-id-simple-when-storing-to-specialized-function.js b/test/webkit/dfg-cfa-prove-put-by-id-simple-when-storing-to-specialized-function.js
new file mode 100644 (file)
index 0000000..6953ffa
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Checks that the DFG CFA does the right things if it proves that a put_by_id is a simple replace when storing to a specialized function property."
+);
+
+function foo(o, v) {
+    o.f = v;
+}
+
+// Warm up foo's put_by_id to make it look polymorphic.
+for (var i = 0; i < 100; ++i)
+    foo(i % 2 ? {a: 1} : {b: 2});
+
+function bar(f) {
+    foo(this, f);
+    return this.f();
+}
+
+function baz() {
+    debug("baz!");
+    return "baz";
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("bar.call({f:baz}, baz)", "\"baz\"");
+
+function fuzz() {
+    debug("fuzz!");
+    return "fuzz";
+}
+
+shouldBe("bar.call({f:baz}, fuzz)", "\"fuzz\"");
+
diff --git a/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-and-decrement-expected.txt b/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-and-decrement-expected.txt
new file mode 100644 (file)
index 0000000..626486d
--- /dev/null
@@ -0,0 +1,532 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when CFG simplification leads to the elimination of a set local that had a type check, and then we branch on the variable not being null while decrementing the variable in the same basic block.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is true
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS foo(o) is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-and-decrement.js b/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-and-decrement.js
new file mode 100644 (file)
index 0000000..cac2d10
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when CFG simplification leads to the elimination of a set local that had a type check, and then we branch on the variable not being null while decrementing the variable in the same basic block."
+);
+
+function foo(o) {
+    var x;
+    if (o.f)
+        x = o.g;
+    else
+        x = o.h;
+    var y = x != null;
+    x--;
+    if (y)
+        return y;
+    else
+        return false;
+}
+
+for (var i = 0; i < 500; ++i) {
+    var o = {f:foo};
+    var expected;
+    if (i < 450) {
+        o.g = i;
+        expected = "true";
+    } else {
+        o.g = null;
+        expected = "false";
+    }
+    shouldBe("foo(o)", expected);
+}
+
+
diff --git a/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-expected.txt b/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null-expected.txt
new file mode 100644 (file)
index 0000000..4dfc7f6
--- /dev/null
@@ -0,0 +1,532 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when CFG simplification leads to the elimination of a set local that had a type check, and then we branch on the variable not being null.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o) is -1
+PASS foo(o) is 0
+PASS foo(o) is 1
+PASS foo(o) is 2
+PASS foo(o) is 3
+PASS foo(o) is 4
+PASS foo(o) is 5
+PASS foo(o) is 6
+PASS foo(o) is 7
+PASS foo(o) is 8
+PASS foo(o) is 9
+PASS foo(o) is 10
+PASS foo(o) is 11
+PASS foo(o) is 12
+PASS foo(o) is 13
+PASS foo(o) is 14
+PASS foo(o) is 15
+PASS foo(o) is 16
+PASS foo(o) is 17
+PASS foo(o) is 18
+PASS foo(o) is 19
+PASS foo(o) is 20
+PASS foo(o) is 21
+PASS foo(o) is 22
+PASS foo(o) is 23
+PASS foo(o) is 24
+PASS foo(o) is 25
+PASS foo(o) is 26
+PASS foo(o) is 27
+PASS foo(o) is 28
+PASS foo(o) is 29
+PASS foo(o) is 30
+PASS foo(o) is 31
+PASS foo(o) is 32
+PASS foo(o) is 33
+PASS foo(o) is 34
+PASS foo(o) is 35
+PASS foo(o) is 36
+PASS foo(o) is 37
+PASS foo(o) is 38
+PASS foo(o) is 39
+PASS foo(o) is 40
+PASS foo(o) is 41
+PASS foo(o) is 42
+PASS foo(o) is 43
+PASS foo(o) is 44
+PASS foo(o) is 45
+PASS foo(o) is 46
+PASS foo(o) is 47
+PASS foo(o) is 48
+PASS foo(o) is 49
+PASS foo(o) is 50
+PASS foo(o) is 51
+PASS foo(o) is 52
+PASS foo(o) is 53
+PASS foo(o) is 54
+PASS foo(o) is 55
+PASS foo(o) is 56
+PASS foo(o) is 57
+PASS foo(o) is 58
+PASS foo(o) is 59
+PASS foo(o) is 60
+PASS foo(o) is 61
+PASS foo(o) is 62
+PASS foo(o) is 63
+PASS foo(o) is 64
+PASS foo(o) is 65
+PASS foo(o) is 66
+PASS foo(o) is 67
+PASS foo(o) is 68
+PASS foo(o) is 69
+PASS foo(o) is 70
+PASS foo(o) is 71
+PASS foo(o) is 72
+PASS foo(o) is 73
+PASS foo(o) is 74
+PASS foo(o) is 75
+PASS foo(o) is 76
+PASS foo(o) is 77
+PASS foo(o) is 78
+PASS foo(o) is 79
+PASS foo(o) is 80
+PASS foo(o) is 81
+PASS foo(o) is 82
+PASS foo(o) is 83
+PASS foo(o) is 84
+PASS foo(o) is 85
+PASS foo(o) is 86
+PASS foo(o) is 87
+PASS foo(o) is 88
+PASS foo(o) is 89
+PASS foo(o) is 90
+PASS foo(o) is 91
+PASS foo(o) is 92
+PASS foo(o) is 93
+PASS foo(o) is 94
+PASS foo(o) is 95
+PASS foo(o) is 96
+PASS foo(o) is 97
+PASS foo(o) is 98
+PASS foo(o) is 99
+PASS foo(o) is 100
+PASS foo(o) is 101
+PASS foo(o) is 102
+PASS foo(o) is 103
+PASS foo(o) is 104
+PASS foo(o) is 105
+PASS foo(o) is 106
+PASS foo(o) is 107
+PASS foo(o) is 108
+PASS foo(o) is 109
+PASS foo(o) is 110
+PASS foo(o) is 111
+PASS foo(o) is 112
+PASS foo(o) is 113
+PASS foo(o) is 114
+PASS foo(o) is 115
+PASS foo(o) is 116
+PASS foo(o) is 117
+PASS foo(o) is 118
+PASS foo(o) is 119
+PASS foo(o) is 120
+PASS foo(o) is 121
+PASS foo(o) is 122
+PASS foo(o) is 123
+PASS foo(o) is 124
+PASS foo(o) is 125
+PASS foo(o) is 126
+PASS foo(o) is 127
+PASS foo(o) is 128
+PASS foo(o) is 129
+PASS foo(o) is 130
+PASS foo(o) is 131
+PASS foo(o) is 132
+PASS foo(o) is 133
+PASS foo(o) is 134
+PASS foo(o) is 135
+PASS foo(o) is 136
+PASS foo(o) is 137
+PASS foo(o) is 138
+PASS foo(o) is 139
+PASS foo(o) is 140
+PASS foo(o) is 141
+PASS foo(o) is 142
+PASS foo(o) is 143
+PASS foo(o) is 144
+PASS foo(o) is 145
+PASS foo(o) is 146
+PASS foo(o) is 147
+PASS foo(o) is 148
+PASS foo(o) is 149
+PASS foo(o) is 150
+PASS foo(o) is 151
+PASS foo(o) is 152
+PASS foo(o) is 153
+PASS foo(o) is 154
+PASS foo(o) is 155
+PASS foo(o) is 156
+PASS foo(o) is 157
+PASS foo(o) is 158
+PASS foo(o) is 159
+PASS foo(o) is 160
+PASS foo(o) is 161
+PASS foo(o) is 162
+PASS foo(o) is 163
+PASS foo(o) is 164
+PASS foo(o) is 165
+PASS foo(o) is 166
+PASS foo(o) is 167
+PASS foo(o) is 168
+PASS foo(o) is 169
+PASS foo(o) is 170
+PASS foo(o) is 171
+PASS foo(o) is 172
+PASS foo(o) is 173
+PASS foo(o) is 174
+PASS foo(o) is 175
+PASS foo(o) is 176
+PASS foo(o) is 177
+PASS foo(o) is 178
+PASS foo(o) is 179
+PASS foo(o) is 180
+PASS foo(o) is 181
+PASS foo(o) is 182
+PASS foo(o) is 183
+PASS foo(o) is 184
+PASS foo(o) is 185
+PASS foo(o) is 186
+PASS foo(o) is 187
+PASS foo(o) is 188
+PASS foo(o) is 189
+PASS foo(o) is 190
+PASS foo(o) is 191
+PASS foo(o) is 192
+PASS foo(o) is 193
+PASS foo(o) is 194
+PASS foo(o) is 195
+PASS foo(o) is 196
+PASS foo(o) is 197
+PASS foo(o) is 198
+PASS foo(o) is 199
+PASS foo(o) is 200
+PASS foo(o) is 201
+PASS foo(o) is 202
+PASS foo(o) is 203
+PASS foo(o) is 204
+PASS foo(o) is 205
+PASS foo(o) is 206
+PASS foo(o) is 207
+PASS foo(o) is 208
+PASS foo(o) is 209
+PASS foo(o) is 210
+PASS foo(o) is 211
+PASS foo(o) is 212
+PASS foo(o) is 213
+PASS foo(o) is 214
+PASS foo(o) is 215
+PASS foo(o) is 216
+PASS foo(o) is 217
+PASS foo(o) is 218
+PASS foo(o) is 219
+PASS foo(o) is 220
+PASS foo(o) is 221
+PASS foo(o) is 222
+PASS foo(o) is 223
+PASS foo(o) is 224
+PASS foo(o) is 225
+PASS foo(o) is 226
+PASS foo(o) is 227
+PASS foo(o) is 228
+PASS foo(o) is 229
+PASS foo(o) is 230
+PASS foo(o) is 231
+PASS foo(o) is 232
+PASS foo(o) is 233
+PASS foo(o) is 234
+PASS foo(o) is 235
+PASS foo(o) is 236
+PASS foo(o) is 237
+PASS foo(o) is 238
+PASS foo(o) is 239
+PASS foo(o) is 240
+PASS foo(o) is 241
+PASS foo(o) is 242
+PASS foo(o) is 243
+PASS foo(o) is 244
+PASS foo(o) is 245
+PASS foo(o) is 246
+PASS foo(o) is 247
+PASS foo(o) is 248
+PASS foo(o) is 249
+PASS foo(o) is 250
+PASS foo(o) is 251
+PASS foo(o) is 252
+PASS foo(o) is 253
+PASS foo(o) is 254
+PASS foo(o) is 255
+PASS foo(o) is 256
+PASS foo(o) is 257
+PASS foo(o) is 258
+PASS foo(o) is 259
+PASS foo(o) is 260
+PASS foo(o) is 261
+PASS foo(o) is 262
+PASS foo(o) is 263
+PASS foo(o) is 264
+PASS foo(o) is 265
+PASS foo(o) is 266
+PASS foo(o) is 267
+PASS foo(o) is 268
+PASS foo(o) is 269
+PASS foo(o) is 270
+PASS foo(o) is 271
+PASS foo(o) is 272
+PASS foo(o) is 273
+PASS foo(o) is 274
+PASS foo(o) is 275
+PASS foo(o) is 276
+PASS foo(o) is 277
+PASS foo(o) is 278
+PASS foo(o) is 279
+PASS foo(o) is 280
+PASS foo(o) is 281
+PASS foo(o) is 282
+PASS foo(o) is 283
+PASS foo(o) is 284
+PASS foo(o) is 285
+PASS foo(o) is 286
+PASS foo(o) is 287
+PASS foo(o) is 288
+PASS foo(o) is 289
+PASS foo(o) is 290
+PASS foo(o) is 291
+PASS foo(o) is 292
+PASS foo(o) is 293
+PASS foo(o) is 294
+PASS foo(o) is 295
+PASS foo(o) is 296
+PASS foo(o) is 297
+PASS foo(o) is 298
+PASS foo(o) is 299
+PASS foo(o) is 300
+PASS foo(o) is 301
+PASS foo(o) is 302
+PASS foo(o) is 303
+PASS foo(o) is 304
+PASS foo(o) is 305
+PASS foo(o) is 306
+PASS foo(o) is 307
+PASS foo(o) is 308
+PASS foo(o) is 309
+PASS foo(o) is 310
+PASS foo(o) is 311
+PASS foo(o) is 312
+PASS foo(o) is 313
+PASS foo(o) is 314
+PASS foo(o) is 315
+PASS foo(o) is 316
+PASS foo(o) is 317
+PASS foo(o) is 318
+PASS foo(o) is 319
+PASS foo(o) is 320
+PASS foo(o) is 321
+PASS foo(o) is 322
+PASS foo(o) is 323
+PASS foo(o) is 324
+PASS foo(o) is 325
+PASS foo(o) is 326
+PASS foo(o) is 327
+PASS foo(o) is 328
+PASS foo(o) is 329
+PASS foo(o) is 330
+PASS foo(o) is 331
+PASS foo(o) is 332
+PASS foo(o) is 333
+PASS foo(o) is 334
+PASS foo(o) is 335
+PASS foo(o) is 336
+PASS foo(o) is 337
+PASS foo(o) is 338
+PASS foo(o) is 339
+PASS foo(o) is 340
+PASS foo(o) is 341
+PASS foo(o) is 342
+PASS foo(o) is 343
+PASS foo(o) is 344
+PASS foo(o) is 345
+PASS foo(o) is 346
+PASS foo(o) is 347
+PASS foo(o) is 348
+PASS foo(o) is 349
+PASS foo(o) is 350
+PASS foo(o) is 351
+PASS foo(o) is 352
+PASS foo(o) is 353
+PASS foo(o) is 354
+PASS foo(o) is 355
+PASS foo(o) is 356
+PASS foo(o) is 357
+PASS foo(o) is 358
+PASS foo(o) is 359
+PASS foo(o) is 360
+PASS foo(o) is 361
+PASS foo(o) is 362
+PASS foo(o) is 363
+PASS foo(o) is 364
+PASS foo(o) is 365
+PASS foo(o) is 366
+PASS foo(o) is 367
+PASS foo(o) is 368
+PASS foo(o) is 369
+PASS foo(o) is 370
+PASS foo(o) is 371
+PASS foo(o) is 372
+PASS foo(o) is 373
+PASS foo(o) is 374
+PASS foo(o) is 375
+PASS foo(o) is 376
+PASS foo(o) is 377
+PASS foo(o) is 378
+PASS foo(o) is 379
+PASS foo(o) is 380
+PASS foo(o) is 381
+PASS foo(o) is 382
+PASS foo(o) is 383
+PASS foo(o) is 384
+PASS foo(o) is 385
+PASS foo(o) is 386
+PASS foo(o) is 387
+PASS foo(o) is 388
+PASS foo(o) is 389
+PASS foo(o) is 390
+PASS foo(o) is 391
+PASS foo(o) is 392
+PASS foo(o) is 393
+PASS foo(o) is 394
+PASS foo(o) is 395
+PASS foo(o) is 396
+PASS foo(o) is 397
+PASS foo(o) is 398
+PASS foo(o) is 399
+PASS foo(o) is 400
+PASS foo(o) is 401
+PASS foo(o) is 402
+PASS foo(o) is 403
+PASS foo(o) is 404
+PASS foo(o) is 405
+PASS foo(o) is 406
+PASS foo(o) is 407
+PASS foo(o) is 408
+PASS foo(o) is 409
+PASS foo(o) is 410
+PASS foo(o) is 411
+PASS foo(o) is 412
+PASS foo(o) is 413
+PASS foo(o) is 414
+PASS foo(o) is 415
+PASS foo(o) is 416
+PASS foo(o) is 417
+PASS foo(o) is 418
+PASS foo(o) is 419
+PASS foo(o) is 420
+PASS foo(o) is 421
+PASS foo(o) is 422
+PASS foo(o) is 423
+PASS foo(o) is 424
+PASS foo(o) is 425
+PASS foo(o) is 426
+PASS foo(o) is 427
+PASS foo(o) is 428
+PASS foo(o) is 429
+PASS foo(o) is 430
+PASS foo(o) is 431
+PASS foo(o) is 432
+PASS foo(o) is 433
+PASS foo(o) is 434
+PASS foo(o) is 435
+PASS foo(o) is 436
+PASS foo(o) is 437
+PASS foo(o) is 438
+PASS foo(o) is 439
+PASS foo(o) is 440
+PASS foo(o) is 441
+PASS foo(o) is 442
+PASS foo(o) is 443
+PASS foo(o) is 444
+PASS foo(o) is 445
+PASS foo(o) is 446
+PASS foo(o) is 447
+PASS foo(o) is 448
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS foo(o) is null
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null.js b/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-branch-not-null.js
new file mode 100644 (file)
index 0000000..7226424
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when CFG simplification leads to the elimination of a set local that had a type check, and then we branch on the variable not being null."
+);
+
+function foo(o) {
+    var x;
+    if (o.f)
+        x = o.g;
+    else
+        x = o.h;
+    if (x != null)
+        return x - 1;
+    else
+        return x;
+}
+
+for (var i = 0; i < 500; ++i) {
+    var o = {f:foo};
+    var expected;
+    if (i < 450) {
+        o.g = i;
+        expected = "" + (i - 1);
+    } else {
+        o.g = null;
+        expected = "null";
+    }
+    shouldBe("foo(o)", expected);
+}
+
diff --git a/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-typeof-expected.txt b/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-typeof-expected.txt
new file mode 100644 (file)
index 0000000..d5f9fa3
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when CFG simplification leads to the elimination of a set local that had a type check, and then we do a typeof on the value, which can be constant folded if the type check stays.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result[0] is "number"
+PASS result[1] is -1
+PASS result[0] is "number"
+PASS result[1] is 0
+PASS result[0] is "number"
+PASS result[1] is 1
+PASS result[0] is "number"
+PASS result[1] is 2
+PASS result[0] is "number"
+PASS result[1] is 3
+PASS result[0] is "number"
+PASS result[1] is 4
+PASS result[0] is "number"
+PASS result[1] is 5
+PASS result[0] is "number"
+PASS result[1] is 6
+PASS result[0] is "number"
+PASS result[1] is 7
+PASS result[0] is "number"
+PASS result[1] is 8
+PASS result[0] is "number"
+PASS result[1] is 9
+PASS result[0] is "number"
+PASS result[1] is 10
+PASS result[0] is "number"
+PASS result[1] is 11
+PASS result[0] is "number"
+PASS result[1] is 12
+PASS result[0] is "number"
+PASS result[1] is 13
+PASS result[0] is "number"
+PASS result[1] is 14
+PASS result[0] is "number"
+PASS result[1] is 15
+PASS result[0] is "number"
+PASS result[1] is 16
+PASS result[0] is "number"
+PASS result[1] is 17
+PASS result[0] is "number"
+PASS result[1] is 18
+PASS result[0] is "number"
+PASS result[1] is 19
+PASS result[0] is "number"
+PASS result[1] is 20
+PASS result[0] is "number"
+PASS result[1] is 21
+PASS result[0] is "number"
+PASS result[1] is 22
+PASS result[0] is "number"
+PASS result[1] is 23
+PASS result[0] is "number"
+PASS result[1] is 24
+PASS result[0] is "number"
+PASS result[1] is 25
+PASS result[0] is "number"
+PASS result[1] is 26
+PASS result[0] is "number"
+PASS result[1] is 27
+PASS result[0] is "number"
+PASS result[1] is 28
+PASS result[0] is "number"
+PASS result[1] is 29
+PASS result[0] is "number"
+PASS result[1] is 30
+PASS result[0] is "number"
+PASS result[1] is 31
+PASS result[0] is "number"
+PASS result[1] is 32
+PASS result[0] is "number"
+PASS result[1] is 33
+PASS result[0] is "number"
+PASS result[1] is 34
+PASS result[0] is "number"
+PASS result[1] is 35
+PASS result[0] is "number"
+PASS result[1] is 36
+PASS result[0] is "number"
+PASS result[1] is 37
+PASS result[0] is "number"
+PASS result[1] is 38
+PASS result[0] is "number"
+PASS result[1] is 39
+PASS result[0] is "number"
+PASS result[1] is 40
+PASS result[0] is "number"
+PASS result[1] is 41
+PASS result[0] is "number"
+PASS result[1] is 42
+PASS result[0] is "number"
+PASS result[1] is 43
+PASS result[0] is "number"
+PASS result[1] is 44
+PASS result[0] is "number"
+PASS result[1] is 45
+PASS result[0] is "number"
+PASS result[1] is 46
+PASS result[0] is "number"
+PASS result[1] is 47
+PASS result[0] is "number"
+PASS result[1] is 48
+PASS result[0] is "number"
+PASS result[1] is 49
+PASS result[0] is "number"
+PASS result[1] is 50
+PASS result[0] is "number"
+PASS result[1] is 51
+PASS result[0] is "number"
+PASS result[1] is 52
+PASS result[0] is "number"
+PASS result[1] is 53
+PASS result[0] is "number"
+PASS result[1] is 54
+PASS result[0] is "number"
+PASS result[1] is 55
+PASS result[0] is "number"
+PASS result[1] is 56
+PASS result[0] is "number"
+PASS result[1] is 57
+PASS result[0] is "number"
+PASS result[1] is 58
+PASS result[0] is "number"
+PASS result[1] is 59
+PASS result[0] is "number"
+PASS result[1] is 60
+PASS result[0] is "number"
+PASS result[1] is 61
+PASS result[0] is "number"
+PASS result[1] is 62
+PASS result[0] is "number"
+PASS result[1] is 63
+PASS result[0] is "number"
+PASS result[1] is 64
+PASS result[0] is "number"
+PASS result[1] is 65
+PASS result[0] is "number"
+PASS result[1] is 66
+PASS result[0] is "number"
+PASS result[1] is 67
+PASS result[0] is "number"
+PASS result[1] is 68
+PASS result[0] is "number"
+PASS result[1] is 69
+PASS result[0] is "number"
+PASS result[1] is 70
+PASS result[0] is "number"
+PASS result[1] is 71
+PASS result[0] is "number"
+PASS result[1] is 72
+PASS result[0] is "number"
+PASS result[1] is 73
+PASS result[0] is "number"
+PASS result[1] is 74
+PASS result[0] is "number"
+PASS result[1] is 75
+PASS result[0] is "number"
+PASS result[1] is 76
+PASS result[0] is "number"
+PASS result[1] is 77
+PASS result[0] is "number"
+PASS result[1] is 78
+PASS result[0] is "number"
+PASS result[1] is 79
+PASS result[0] is "number"
+PASS result[1] is 80
+PASS result[0] is "number"
+PASS result[1] is 81
+PASS result[0] is "number"
+PASS result[1] is 82
+PASS result[0] is "number"
+PASS result[1] is 83
+PASS result[0] is "number"
+PASS result[1] is 84
+PASS result[0] is "number"
+PASS result[1] is 85
+PASS result[0] is "number"
+PASS result[1] is 86
+PASS result[0] is "number"
+PASS result[1] is 87
+PASS result[0] is "number"
+PASS result[1] is 88
+PASS result[0] is "number"
+PASS result[1] is 89
+PASS result[0] is "number"
+PASS result[1] is 90
+PASS result[0] is "number"
+PASS result[1] is 91
+PASS result[0] is "number"
+PASS result[1] is 92
+PASS result[0] is "number"
+PASS result[1] is 93
+PASS result[0] is "number"
+PASS result[1] is 94
+PASS result[0] is "number"
+PASS result[1] is 95
+PASS result[0] is "number"
+PASS result[1] is 96
+PASS result[0] is "number"
+PASS result[1] is 97
+PASS result[0] is "number"
+PASS result[1] is 98
+PASS result[0] is "number"
+PASS result[1] is 99
+PASS result[0] is "number"
+PASS result[1] is 100
+PASS result[0] is "number"
+PASS result[1] is 101
+PASS result[0] is "number"
+PASS result[1] is 102
+PASS result[0] is "number"
+PASS result[1] is 103
+PASS result[0] is "number"
+PASS result[1] is 104
+PASS result[0] is "number"
+PASS result[1] is 105
+PASS result[0] is "number"
+PASS result[1] is 106
+PASS result[0] is "number"
+PASS result[1] is 107
+PASS result[0] is "number"
+PASS result[1] is 108
+PASS result[0] is "number"
+PASS result[1] is 109
+PASS result[0] is "number"
+PASS result[1] is 110
+PASS result[0] is "number"
+PASS result[1] is 111
+PASS result[0] is "number"
+PASS result[1] is 112
+PASS result[0] is "number"
+PASS result[1] is 113
+PASS result[0] is "number"
+PASS result[1] is 114
+PASS result[0] is "number"
+PASS result[1] is 115
+PASS result[0] is "number"
+PASS result[1] is 116
+PASS result[0] is "number"
+PASS result[1] is 117
+PASS result[0] is "number"
+PASS result[1] is 118
+PASS result[0] is "number"
+PASS result[1] is 119
+PASS result[0] is "number"
+PASS result[1] is 120
+PASS result[0] is "number"
+PASS result[1] is 121
+PASS result[0] is "number"
+PASS result[1] is 122
+PASS result[0] is "number"
+PASS result[1] is 123
+PASS result[0] is "number"
+PASS result[1] is 124
+PASS result[0] is "number"
+PASS result[1] is 125
+PASS result[0] is "number"
+PASS result[1] is 126
+PASS result[0] is "number"
+PASS result[1] is 127
+PASS result[0] is "number"
+PASS result[1] is 128
+PASS result[0] is "number"
+PASS result[1] is 129
+PASS result[0] is "number"
+PASS result[1] is 130
+PASS result[0] is "number"
+PASS result[1] is 131
+PASS result[0] is "number"
+PASS result[1] is 132
+PASS result[0] is "number"
+PASS result[1] is 133
+PASS result[0] is "number"
+PASS result[1] is 134
+PASS result[0] is "number"
+PASS result[1] is 135
+PASS result[0] is "number"
+PASS result[1] is 136
+PASS result[0] is "number"
+PASS result[1] is 137
+PASS result[0] is "number"
+PASS result[1] is 138
+PASS result[0] is "number"
+PASS result[1] is 139
+PASS result[0] is "number"
+PASS result[1] is 140
+PASS result[0] is "number"
+PASS result[1] is 141
+PASS result[0] is "number"
+PASS result[1] is 142
+PASS result[0] is "number"
+PASS result[1] is 143
+PASS result[0] is "number"
+PASS result[1] is 144
+PASS result[0] is "number"
+PASS result[1] is 145
+PASS result[0] is "number"
+PASS result[1] is 146
+PASS result[0] is "number"
+PASS result[1] is 147
+PASS result[0] is "number"
+PASS result[1] is 148
+PASS result[0] is "number"
+PASS result[1] is 149
+PASS result[0] is "number"
+PASS result[1] is 150
+PASS result[0] is "number"
+PASS result[1] is 151
+PASS result[0] is "number"
+PASS result[1] is 152
+PASS result[0] is "number"
+PASS result[1] is 153
+PASS result[0] is "number"
+PASS result[1] is 154
+PASS result[0] is "number"
+PASS result[1] is 155
+PASS result[0] is "number"
+PASS result[1] is 156
+PASS result[0] is "number"
+PASS result[1] is 157
+PASS result[0] is "number"
+PASS result[1] is 158
+PASS result[0] is "number"
+PASS result[1] is 159
+PASS result[0] is "number"
+PASS result[1] is 160
+PASS result[0] is "number"
+PASS result[1] is 161
+PASS result[0] is "number"
+PASS result[1] is 162
+PASS result[0] is "number"
+PASS result[1] is 163
+PASS result[0] is "number"
+PASS result[1] is 164
+PASS result[0] is "number"
+PASS result[1] is 165
+PASS result[0] is "number"
+PASS result[1] is 166
+PASS result[0] is "number"
+PASS result[1] is 167
+PASS result[0] is "number"
+PASS result[1] is 168
+PASS result[0] is "number"
+PASS result[1] is 169
+PASS result[0] is "number"
+PASS result[1] is 170
+PASS result[0] is "number"
+PASS result[1] is 171
+PASS result[0] is "number"
+PASS result[1] is 172
+PASS result[0] is "number"
+PASS result[1] is 173
+PASS result[0] is "number"
+PASS result[1] is 174
+PASS result[0] is "number"
+PASS result[1] is 175
+PASS result[0] is "number"
+PASS result[1] is 176
+PASS result[0] is "number"
+PASS result[1] is 177
+PASS result[0] is "number"
+PASS result[1] is 178
+PASS result[0] is "number"
+PASS result[1] is 179
+PASS result[0] is "number"
+PASS result[1] is 180
+PASS result[0] is "number"
+PASS result[1] is 181
+PASS result[0] is "number"
+PASS result[1] is 182
+PASS result[0] is "number"
+PASS result[1] is 183
+PASS result[0] is "number"
+PASS result[1] is 184
+PASS result[0] is "number"
+PASS result[1] is 185
+PASS result[0] is "number"
+PASS result[1] is 186
+PASS result[0] is "number"
+PASS result[1] is 187
+PASS result[0] is "number"
+PASS result[1] is 188
+PASS result[0] is "number"
+PASS result[1] is 189
+PASS result[0] is "number"
+PASS result[1] is 190
+PASS result[0] is "number"
+PASS result[1] is 191
+PASS result[0] is "number"
+PASS result[1] is 192
+PASS result[0] is "number"
+PASS result[1] is 193
+PASS result[0] is "number"
+PASS result[1] is 194
+PASS result[0] is "number"
+PASS result[1] is 195
+PASS result[0] is "number"
+PASS result[1] is 196
+PASS result[0] is "number"
+PASS result[1] is 197
+PASS result[0] is "number"
+PASS result[1] is 198
+PASS result[0] is "number"
+PASS result[1] is 199
+PASS result[0] is "number"
+PASS result[1] is 200
+PASS result[0] is "number"
+PASS result[1] is 201
+PASS result[0] is "number"
+PASS result[1] is 202
+PASS result[0] is "number"
+PASS result[1] is 203
+PASS result[0] is "number"
+PASS result[1] is 204
+PASS result[0] is "number"
+PASS result[1] is 205
+PASS result[0] is "number"
+PASS result[1] is 206
+PASS result[0] is "number"
+PASS result[1] is 207
+PASS result[0] is "number"
+PASS result[1] is 208
+PASS result[0] is "number"
+PASS result[1] is 209
+PASS result[0] is "number"
+PASS result[1] is 210
+PASS result[0] is "number"
+PASS result[1] is 211
+PASS result[0] is "number"
+PASS result[1] is 212
+PASS result[0] is "number"
+PASS result[1] is 213
+PASS result[0] is "number"
+PASS result[1] is 214
+PASS result[0] is "number"
+PASS result[1] is 215
+PASS result[0] is "number"
+PASS result[1] is 216
+PASS result[0] is "number"
+PASS result[1] is 217
+PASS result[0] is "number"
+PASS result[1] is 218
+PASS result[0] is "number"
+PASS result[1] is 219
+PASS result[0] is "number"
+PASS result[1] is 220
+PASS result[0] is "number"
+PASS result[1] is 221
+PASS result[0] is "number"
+PASS result[1] is 222
+PASS result[0] is "number"
+PASS result[1] is 223
+PASS result[0] is "number"
+PASS result[1] is 224
+PASS result[0] is "number"
+PASS result[1] is 225
+PASS result[0] is "number"
+PASS result[1] is 226
+PASS result[0] is "number"
+PASS result[1] is 227
+PASS result[0] is "number"
+PASS result[1] is 228
+PASS result[0] is "number"
+PASS result[1] is 229
+PASS result[0] is "number"
+PASS result[1] is 230
+PASS result[0] is "number"
+PASS result[1] is 231
+PASS result[0] is "number"
+PASS result[1] is 232
+PASS result[0] is "number"
+PASS result[1] is 233
+PASS result[0] is "number"
+PASS result[1] is 234
+PASS result[0] is "number"
+PASS result[1] is 235
+PASS result[0] is "number"
+PASS result[1] is 236
+PASS result[0] is "number"
+PASS result[1] is 237
+PASS result[0] is "number"
+PASS result[1] is 238
+PASS result[0] is "number"
+PASS result[1] is 239
+PASS result[0] is "number"
+PASS result[1] is 240
+PASS result[0] is "number"
+PASS result[1] is 241
+PASS result[0] is "number"
+PASS result[1] is 242
+PASS result[0] is "number"
+PASS result[1] is 243
+PASS result[0] is "number"
+PASS result[1] is 244
+PASS result[0] is "number"
+PASS result[1] is 245
+PASS result[0] is "number"
+PASS result[1] is 246
+PASS result[0] is "number"
+PASS result[1] is 247
+PASS result[0] is "number"
+PASS result[1] is 248
+PASS result[0] is "number"
+PASS result[1] is 249
+PASS result[0] is "number"
+PASS result[1] is 250
+PASS result[0] is "number"
+PASS result[1] is 251
+PASS result[0] is "number"
+PASS result[1] is 252
+PASS result[0] is "number"
+PASS result[1] is 253
+PASS result[0] is "number"
+PASS result[1] is 254
+PASS result[0] is "number"
+PASS result[1] is 255
+PASS result[0] is "number"
+PASS result[1] is 256
+PASS result[0] is "number"
+PASS result[1] is 257
+PASS result[0] is "number"
+PASS result[1] is 258
+PASS result[0] is "number"
+PASS result[1] is 259
+PASS result[0] is "number"
+PASS result[1] is 260
+PASS result[0] is "number"
+PASS result[1] is 261
+PASS result[0] is "number"
+PASS result[1] is 262
+PASS result[0] is "number"
+PASS result[1] is 263
+PASS result[0] is "number"
+PASS result[1] is 264
+PASS result[0] is "number"
+PASS result[1] is 265
+PASS result[0] is "number"
+PASS result[1] is 266
+PASS result[0] is "number"
+PASS result[1] is 267
+PASS result[0] is "number"
+PASS result[1] is 268
+PASS result[0] is "number"
+PASS result[1] is 269
+PASS result[0] is "number"
+PASS result[1] is 270
+PASS result[0] is "number"
+PASS result[1] is 271
+PASS result[0] is "number"
+PASS result[1] is 272
+PASS result[0] is "number"
+PASS result[1] is 273
+PASS result[0] is "number"
+PASS result[1] is 274
+PASS result[0] is "number"
+PASS result[1] is 275
+PASS result[0] is "number"
+PASS result[1] is 276
+PASS result[0] is "number"
+PASS result[1] is 277
+PASS result[0] is "number"
+PASS result[1] is 278
+PASS result[0] is "number"
+PASS result[1] is 279
+PASS result[0] is "number"
+PASS result[1] is 280
+PASS result[0] is "number"
+PASS result[1] is 281
+PASS result[0] is "number"
+PASS result[1] is 282
+PASS result[0] is "number"
+PASS result[1] is 283
+PASS result[0] is "number"
+PASS result[1] is 284
+PASS result[0] is "number"
+PASS result[1] is 285
+PASS result[0] is "number"
+PASS result[1] is 286
+PASS result[0] is "number"
+PASS result[1] is 287
+PASS result[0] is "number"
+PASS result[1] is 288
+PASS result[0] is "number"
+PASS result[1] is 289
+PASS result[0] is "number"
+PASS result[1] is 290
+PASS result[0] is "number"
+PASS result[1] is 291
+PASS result[0] is "number"
+PASS result[1] is 292
+PASS result[0] is "number"
+PASS result[1] is 293
+PASS result[0] is "number"
+PASS result[1] is 294
+PASS result[0] is "number"
+PASS result[1] is 295
+PASS result[0] is "number"
+PASS result[1] is 296
+PASS result[0] is "number"
+PASS result[1] is 297
+PASS result[0] is "number"
+PASS result[1] is 298
+PASS result[0] is "number"
+PASS result[1] is 299
+PASS result[0] is "number"
+PASS result[1] is 300
+PASS result[0] is "number"
+PASS result[1] is 301
+PASS result[0] is "number"
+PASS result[1] is 302
+PASS result[0] is "number"
+PASS result[1] is 303
+PASS result[0] is "number"
+PASS result[1] is 304
+PASS result[0] is "number"
+PASS result[1] is 305
+PASS result[0] is "number"
+PASS result[1] is 306
+PASS result[0] is "number"
+PASS result[1] is 307
+PASS result[0] is "number"
+PASS result[1] is 308
+PASS result[0] is "number"
+PASS result[1] is 309
+PASS result[0] is "number"
+PASS result[1] is 310
+PASS result[0] is "number"
+PASS result[1] is 311
+PASS result[0] is "number"
+PASS result[1] is 312
+PASS result[0] is "number"
+PASS result[1] is 313
+PASS result[0] is "number"
+PASS result[1] is 314
+PASS result[0] is "number"
+PASS result[1] is 315
+PASS result[0] is "number"
+PASS result[1] is 316
+PASS result[0] is "number"
+PASS result[1] is 317
+PASS result[0] is "number"
+PASS result[1] is 318
+PASS result[0] is "number"
+PASS result[1] is 319
+PASS result[0] is "number"
+PASS result[1] is 320
+PASS result[0] is "number"
+PASS result[1] is 321
+PASS result[0] is "number"
+PASS result[1] is 322
+PASS result[0] is "number"
+PASS result[1] is 323
+PASS result[0] is "number"
+PASS result[1] is 324
+PASS result[0] is "number"
+PASS result[1] is 325
+PASS result[0] is "number"
+PASS result[1] is 326
+PASS result[0] is "number"
+PASS result[1] is 327
+PASS result[0] is "number"
+PASS result[1] is 328
+PASS result[0] is "number"
+PASS result[1] is 329
+PASS result[0] is "number"
+PASS result[1] is 330
+PASS result[0] is "number"
+PASS result[1] is 331
+PASS result[0] is "number"
+PASS result[1] is 332
+PASS result[0] is "number"
+PASS result[1] is 333
+PASS result[0] is "number"
+PASS result[1] is 334
+PASS result[0] is "number"
+PASS result[1] is 335
+PASS result[0] is "number"
+PASS result[1] is 336
+PASS result[0] is "number"
+PASS result[1] is 337
+PASS result[0] is "number"
+PASS result[1] is 338
+PASS result[0] is "number"
+PASS result[1] is 339
+PASS result[0] is "number"
+PASS result[1] is 340
+PASS result[0] is "number"
+PASS result[1] is 341
+PASS result[0] is "number"
+PASS result[1] is 342
+PASS result[0] is "number"
+PASS result[1] is 343
+PASS result[0] is "number"
+PASS result[1] is 344
+PASS result[0] is "number"
+PASS result[1] is 345
+PASS result[0] is "number"
+PASS result[1] is 346
+PASS result[0] is "number"
+PASS result[1] is 347
+PASS result[0] is "number"
+PASS result[1] is 348
+PASS result[0] is "number"
+PASS result[1] is 349
+PASS result[0] is "number"
+PASS result[1] is 350
+PASS result[0] is "number"
+PASS result[1] is 351
+PASS result[0] is "number"
+PASS result[1] is 352
+PASS result[0] is "number"
+PASS result[1] is 353
+PASS result[0] is "number"
+PASS result[1] is 354
+PASS result[0] is "number"
+PASS result[1] is 355
+PASS result[0] is "number"
+PASS result[1] is 356
+PASS result[0] is "number"
+PASS result[1] is 357
+PASS result[0] is "number"
+PASS result[1] is 358
+PASS result[0] is "number"
+PASS result[1] is 359
+PASS result[0] is "number"
+PASS result[1] is 360
+PASS result[0] is "number"
+PASS result[1] is 361
+PASS result[0] is "number"
+PASS result[1] is 362
+PASS result[0] is "number"
+PASS result[1] is 363
+PASS result[0] is "number"
+PASS result[1] is 364
+PASS result[0] is "number"
+PASS result[1] is 365
+PASS result[0] is "number"
+PASS result[1] is 366
+PASS result[0] is "number"
+PASS result[1] is 367
+PASS result[0] is "number"
+PASS result[1] is 368
+PASS result[0] is "number"
+PASS result[1] is 369
+PASS result[0] is "number"
+PASS result[1] is 370
+PASS result[0] is "number"
+PASS result[1] is 371
+PASS result[0] is "number"
+PASS result[1] is 372
+PASS result[0] is "number"
+PASS result[1] is 373
+PASS result[0] is "number"
+PASS result[1] is 374
+PASS result[0] is "number"
+PASS result[1] is 375
+PASS result[0] is "number"
+PASS result[1] is 376
+PASS result[0] is "number"
+PASS result[1] is 377
+PASS result[0] is "number"
+PASS result[1] is 378
+PASS result[0] is "number"
+PASS result[1] is 379
+PASS result[0] is "number"
+PASS result[1] is 380
+PASS result[0] is "number"
+PASS result[1] is 381
+PASS result[0] is "number"
+PASS result[1] is 382
+PASS result[0] is "number"
+PASS result[1] is 383
+PASS result[0] is "number"
+PASS result[1] is 384
+PASS result[0] is "number"
+PASS result[1] is 385
+PASS result[0] is "number"
+PASS result[1] is 386
+PASS result[0] is "number"
+PASS result[1] is 387
+PASS result[0] is "number"
+PASS result[1] is 388
+PASS result[0] is "number"
+PASS result[1] is 389
+PASS result[0] is "number"
+PASS result[1] is 390
+PASS result[0] is "number"
+PASS result[1] is 391
+PASS result[0] is "number"
+PASS result[1] is 392
+PASS result[0] is "number"
+PASS result[1] is 393
+PASS result[0] is "number"
+PASS result[1] is 394
+PASS result[0] is "number"
+PASS result[1] is 395
+PASS result[0] is "number"
+PASS result[1] is 396
+PASS result[0] is "number"
+PASS result[1] is 397
+PASS result[0] is "number"
+PASS result[1] is 398
+PASS result[0] is "number"
+PASS result[1] is 399
+PASS result[0] is "number"
+PASS result[1] is 400
+PASS result[0] is "number"
+PASS result[1] is 401
+PASS result[0] is "number"
+PASS result[1] is 402
+PASS result[0] is "number"
+PASS result[1] is 403
+PASS result[0] is "number"
+PASS result[1] is 404
+PASS result[0] is "number"
+PASS result[1] is 405
+PASS result[0] is "number"
+PASS result[1] is 406
+PASS result[0] is "number"
+PASS result[1] is 407
+PASS result[0] is "number"
+PASS result[1] is 408
+PASS result[0] is "number"
+PASS result[1] is 409
+PASS result[0] is "number"
+PASS result[1] is 410
+PASS result[0] is "number"
+PASS result[1] is 411
+PASS result[0] is "number"
+PASS result[1] is 412
+PASS result[0] is "number"
+PASS result[1] is 413
+PASS result[0] is "number"
+PASS result[1] is 414
+PASS result[0] is "number"
+PASS result[1] is 415
+PASS result[0] is "number"
+PASS result[1] is 416
+PASS result[0] is "number"
+PASS result[1] is 417
+PASS result[0] is "number"
+PASS result[1] is 418
+PASS result[0] is "number"
+PASS result[1] is 419
+PASS result[0] is "number"
+PASS result[1] is 420
+PASS result[0] is "number"
+PASS result[1] is 421
+PASS result[0] is "number"
+PASS result[1] is 422
+PASS result[0] is "number"
+PASS result[1] is 423
+PASS result[0] is "number"
+PASS result[1] is 424
+PASS result[0] is "number"
+PASS result[1] is 425
+PASS result[0] is "number"
+PASS result[1] is 426
+PASS result[0] is "number"
+PASS result[1] is 427
+PASS result[0] is "number"
+PASS result[1] is 428
+PASS result[0] is "number"
+PASS result[1] is 429
+PASS result[0] is "number"
+PASS result[1] is 430
+PASS result[0] is "number"
+PASS result[1] is 431
+PASS result[0] is "number"
+PASS result[1] is 432
+PASS result[0] is "number"
+PASS result[1] is 433
+PASS result[0] is "number"
+PASS result[1] is 434
+PASS result[0] is "number"
+PASS result[1] is 435
+PASS result[0] is "number"
+PASS result[1] is 436
+PASS result[0] is "number"
+PASS result[1] is 437
+PASS result[0] is "number"
+PASS result[1] is 438
+PASS result[0] is "number"
+PASS result[1] is 439
+PASS result[0] is "number"
+PASS result[1] is 440
+PASS result[0] is "number"
+PASS result[1] is 441
+PASS result[0] is "number"
+PASS result[1] is 442
+PASS result[0] is "number"
+PASS result[1] is 443
+PASS result[0] is "number"
+PASS result[1] is 444
+PASS result[0] is "number"
+PASS result[1] is 445
+PASS result[0] is "number"
+PASS result[1] is 446
+PASS result[0] is "number"
+PASS result[1] is 447
+PASS result[0] is "number"
+PASS result[1] is 448
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS result[0] is "string"
+PASS result[1] is 41
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-typeof.js b/test/webkit/dfg-cfg-simplify-eliminate-set-local-type-check-then-typeof.js
new file mode 100644 (file)
index 0000000..bb4fee9
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when CFG simplification leads to the elimination of a set local that had a type check, and then we do a typeof on the value, which can be constant folded if the type check stays."
+);
+
+function foo(o) {
+    var x;
+    if (o.f)
+        x = o.g;
+    else
+        x = o.h;
+    return [typeof x, x - 1];
+}
+
+for (var i = 0; i < 500; ++i) {
+    var o = {f:foo};
+    var expectedFirst;
+    var expectedSecond;
+    if (i < 450) {
+        o.g = i;
+        expectedFirst = "\"number\"";
+        expectedSecond = "" + (i - 1);
+    } else {
+        o.g = "42";
+        expectedFirst = "\"string\"";
+        expectedSecond = "41";
+    }
+    var result = foo(o);
+    shouldBe("result[0]", expectedFirst);
+    shouldBe("result[1]", expectedSecond);
+}
+
diff --git a/test/webkit/dfg-cfg-simplify-phantom-get-local-on-same-block-set-local-expected.txt b/test/webkit/dfg-cfg-simplify-phantom-get-local-on-same-block-set-local-expected.txt
new file mode 100644 (file)
index 0000000..4c64e0d
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that attempts by the DFG simplification to short-circuit a Phantom to a GetLocal on a variable that is SetLocal'd in the same block, and where the predecessor block(s) make no mention of that variable, do not result in crashes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS thingy(o) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-cfg-simplify-phantom-get-local-on-same-block-set-local.js b/test/webkit/dfg-cfg-simplify-phantom-get-local-on-same-block-set-local.js
new file mode 100644 (file)
index 0000000..65be965
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that attempts by the DFG simplification to short-circuit a Phantom to a GetLocal on a variable that is SetLocal'd in the same block, and where the predecessor block(s) make no mention of that variable, do not result in crashes."
+);
+
+function baz() {
+    // Do something that prevents inlining.
+    return function() { }
+}
+
+function stuff(z) { }
+
+function foo(x, y) {
+    var a = arguments; // Force arguments to be captured, so that x is captured.
+    baz();
+    var z = x;
+    stuff(z); // Force a Flush, and then a Phantom on the GetLocal of x.
+    return 42;
+}
+
+var o = {
+    g: function(x) { }
+};
+
+function thingy(o) {
+    var p = {};
+    var result;
+    // Trick to delay control flow graph simplification until after the flush of x above gets turned into a phantom.
+    if (o.g)
+        p.f = true;
+    if (p.f) {
+        // Basic block that stores to x in foo(), which is a captured variable, with
+        // the predecessor block making no mention of x.
+        result = foo("hello", 2);
+    }
+    return result;
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("thingy(o)", "42");
+
diff --git a/test/webkit/dfg-cfg-simplify-redundant-dead-get-local-expected.txt b/test/webkit/dfg-cfg-simplify-redundant-dead-get-local-expected.txt
new file mode 100644 (file)
index 0000000..aad8d82
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests if the CFG simplifier gracefully handles the case where Block #1 and #2 are merged, #1 has a dead GetLocal, and #2 has a live GetLocal on the same local.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS array[i] is 2.23606797749979
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-cfg-simplify-redundant-dead-get-local.js b/test/webkit/dfg-cfg-simplify-redundant-dead-get-local.js
new file mode 100644 (file)
index 0000000..085af05
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests if the CFG simplifier gracefully handles the case where Block #1 and #2 are merged, #1 has a dead GetLocal, and #2 has a live GetLocal on the same local."
+);
+
+var array = [];
+
+var getDist = function () {
+    // a conditional absolutely MUST be here for the whole thing to break.
+    // the return value is irrelevant
+
+    if (false) return "I'm irrelevant!";
+
+    return Math.sqrt(5);
+}
+
+
+var calcError = function(){
+    var dist = 0; // initialisation is necessary for the bug to occur
+
+    true && (dist = getDist());
+
+    array.push(dist);
+}
+
+
+for(var a=0; a<1000; a++){ // the loop needs to be outside calcError, otherwise no bug...
+    calcError();
+}
+
+for (var i = 0; i < array.length; ++i)
+    shouldBe("array[i]", "2.23606797749979");
diff --git a/test/webkit/dfg-check-structure-elimination-for-non-cell-expected.txt b/test/webkit/dfg-check-structure-elimination-for-non-cell-expected.txt
new file mode 100644 (file)
index 0000000..63b6ba2
--- /dev/null
@@ -0,0 +1,233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do the right things when we prove that we can eliminate a structure check, but haven't proved that the value is definitely an object - i.e. we've proved that it's either an object with a specific structure, or it's not an object at all.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+Caught exception: TypeError: Cannot call method 'g' of null
+PASS baz(i) is "ERROR"
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS baz(i) is 66
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-check-structure-elimination-for-non-cell.js b/test/webkit/dfg-check-structure-elimination-for-non-cell.js
new file mode 100644 (file)
index 0000000..264473c
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do the right things when we prove that we can eliminate a structure check, but haven't proved that the value is definitely an object - i.e. we've proved that it's either an object with a specific structure, or it's not an object at all."
+);
+
+function foo(o, p) {
+    var x = o.f;
+    if (p)
+        o = null;
+    return x + o.g();
+}
+
+function bar() {
+    return 24;
+}
+
+function baz(i) {
+    try {
+        return foo({f:42, g:bar}, i == 190);
+    } catch (e) {
+        debug("Caught exception: " + e);
+        return "ERROR";
+    }
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("baz(i)", i == 190 ? "\"ERROR\"" : "66");
diff --git a/test/webkit/dfg-check-two-structures-expected.txt b/test/webkit/dfg-check-two-structures-expected.txt
new file mode 100644 (file)
index 0000000..03996e5
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that a polymorphic structure check is actually executed.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 44
+PASS foo(o, o) is 42
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS foo(o, o) is 46
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-check-two-structures.js b/test/webkit/dfg-check-two-structures.js
new file mode 100644 (file)
index 0000000..b5881ff
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that a polymorphic structure check is actually executed."
+);
+
+function foo(o, p) {
+    if (o == p)
+        return o.f;
+    else
+        return 75;
+}
+
+var o1 = {f:42, g:43};
+var o2 = {f:44};
+var o3 = {e:45, f:46};
+
+for (var i = 0; i < 200; ++i) {
+    var o;
+    var expected;
+    if (i < 150) {
+        if (i & 1) {
+            o = o1;
+            expected = 42;
+        } else {
+            o = o2;
+            expected = 44;
+        }
+    } else {
+        o = o3;
+        expected = 46;
+    }
+    shouldBe("foo(o, o)", "" + expected);
+}
diff --git a/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-both-proven-final-object-expected.txt b/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-both-proven-final-object-expected.txt
new file mode 100644 (file)
index 0000000..71c2f6b
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the CompareEq optimization for the case where one side is predicted final object and the other side is predicted either final object or other (i.e. null or undefined) doesn't assert when both sides are also proven final object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js b/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js
new file mode 100644 (file)
index 0000000..8b986a1
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the CompareEq optimization for the case where one side is predicted final object and the other side is predicted either final object or other (i.e. null or undefined) doesn't assert when both sides are also proven final object."
+);
+
+function foo(a, b) {
+    return [a.f, b.f, a == b];
+}
+
+for (var i = 0; i < 100; ++i) {
+    if (i%2) {
+        var o = {f:42};
+        shouldBe("foo(o, o)", "[42, 42, true]");
+    } else
+        shouldThrow("foo({f:42}, null)");
+}
+
diff --git a/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-proven-final-object-expected.txt b/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-proven-final-object-expected.txt
new file mode 100644 (file)
index 0000000..c288823
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the CompareEq optimization for the case where one side is predicted final object and the other side is predicted either final object or other (i.e. null or undefined) doesn't assert when the other side is also proven final object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-proven-final-object.js b/test/webkit/dfg-compare-final-object-to-final-object-or-other-when-proven-final-object.js
new file mode 100644 (file)
index 0000000..f49eed9
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the CompareEq optimization for the case where one side is predicted final object and the other side is predicted either final object or other (i.e. null or undefined) doesn't assert when the other side is also proven final object."
+);
+
+function foo(a, b) {
+    return [b.f, a == b];
+}
+
+for (var i = 0; i < 100; ++i) {
+    if (i%2) {
+        var o = {f:42};
+        shouldBe("foo(o, o)", "[42, true]");
+    } else
+        shouldThrow("foo({f:42}, null)");
+}
+
diff --git a/test/webkit/dfg-constant-fold-first-local-read-after-block-merge-expected.txt b/test/webkit/dfg-constant-fold-first-local-read-after-block-merge-expected.txt
new file mode 100644 (file)
index 0000000..0607a6c
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG doesn't crash if we constant fold the first read of a local variable in a block that is the result of merging two blocks, where the first doesn't touch the local and the second reads it.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS bar(5) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-constant-fold-first-local-read-after-block-merge.js b/test/webkit/dfg-constant-fold-first-local-read-after-block-merge.js
new file mode 100644 (file)
index 0000000..3969242
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG doesn't crash if we constant fold the first read of a local variable in a block that is the result of merging two blocks, where the first doesn't touch the local and the second reads it."
+);
+
+function foo(x, y) {
+    var o = {};
+    if (y == 5) {
+        o.f = 42;
+    }
+    var z = o.f;
+    if (x == 5) {
+        if (y == 5) {
+            return z;
+        }
+    }
+}
+
+function bar(x) {
+    return foo(x, 5);
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("bar(5)", "42");
+
diff --git a/test/webkit/dfg-constant-fold-logical-not-branch-expected.txt b/test/webkit/dfg-constant-fold-logical-not-branch-expected.txt
new file mode 100644 (file)
index 0000000..d4a84f2
--- /dev/null
@@ -0,0 +1,2032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens if we fail to constant fold a LogicalNot that leads into a branch, when the CFA proves that the LogicalNot has a constant value.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS foo1(new Stuff()) is 43
+PASS foo2(new Stuff()) is 58
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-constant-fold-logical-not-branch.js b/test/webkit/dfg-constant-fold-logical-not-branch.js
new file mode 100644 (file)
index 0000000..6a91b14
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens if we fail to constant fold a LogicalNot that leads into a branch, when the CFA proves that the LogicalNot has a constant value."
+);
+
+function foo1(o) {
+    if (!!o.thingy)
+        return o.thingy(42);
+    else
+        return o.otherThingy(57);
+}
+
+function foo2(o) {
+    if (!o.thingy)
+        return o.otherThingy(42);
+    else
+        return o.thingy(57);
+}
+
+function Stuff() {
+}
+
+Stuff.prototype = {
+    thingy: function(x) { return x + 1; },
+    otherThingy: function(x) { return x - 1; }
+};
+
+for (var i = 0; i < 1000; ++i) {
+    shouldBe("foo1(new Stuff())", "43");
+    shouldBe("foo2(new Stuff())", "58");
+}
+
+
diff --git a/test/webkit/dfg-constant-fold-misprediction-expected.txt b/test/webkit/dfg-constant-fold-misprediction-expected.txt
new file mode 100644 (file)
index 0000000..8d59b23
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that a constant folding on a node that has obviously mispredicted type doesn't send the compiler into an infinite loop.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(0.5) is 1000.50025
+PASS foo(0.5) is 1000.50025
+PASS foo(0.5) is 1000.50025
+PASS foo(0.5) is 1000.50025
+PASS foo(0.5) is 1000.50025
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-constant-fold-misprediction.js b/test/webkit/dfg-constant-fold-misprediction.js
new file mode 100644 (file)
index 0000000..cd73f70
--- /dev/null
@@ -0,0 +1,60 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that a constant folding on a node that has obviously mispredicted type doesn't send the compiler into an infinite loop."
+);
+
+// A function with an argument correctly predicted double.
+function foo(x) {
+    // Two variables holding constants such that the bytecode generation constant folder
+    // will not constant fold the division below, but the DFG constant folder will.
+    var a = 1;
+    var b = 4000;
+    // A division that is going to be predicted integer on the first compilation. The
+    // compilation will be triggered from the loop below so the slow case counter of the
+    // division will be 1, which is too low for the division to be predicted double.
+    // If we constant fold this division, we'll have a constant node that is predicted
+    // integer but that contains a double. The subsequent addition to x, which is
+    // predicted double, will lead the Fixup phase to inject an Int32ToDouble node on
+    // the constant-that-was-a-division; subsequent fases in the fixpoint will constant
+    // fold that Int32ToDouble. And hence we will have an infinite loop. The correct fix
+    // is to disable constant folding of mispredicted nodes; that allows the normal
+    // process of correcting predictions (OSR exit profiling, exiting to profiled code,
+    // and recompilation with exponential backoff) to take effect so that the next
+    // compilation does not make this same mistake.
+    var c = (a / b) + x;
+    // A pointless loop to force the first compilation to occur before the division got
+    // hot. If this loop was not here then the division would be known to produce doubles
+    // on the first compilation.
+    var d = 0;
+    for (var i = 0; i < 1000; ++i)
+        d++;
+    return c + d;
+}
+
+// Call foo() enough times to make totally sure that we optimize.
+for (var i = 0; i < 5; ++i)
+    shouldBe("foo(0.5)", "1000.50025");
+
+
diff --git a/test/webkit/dfg-constant-fold-uncaptured-variable-that-is-later-captured-expected.txt b/test/webkit/dfg-constant-fold-uncaptured-variable-that-is-later-captured-expected.txt
new file mode 100644 (file)
index 0000000..82c3610
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that constant folding an access to an uncaptured variable that is captured later in the same basic block doesn't lead to assertion failures.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS foo(true, 5)[0] is 462
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-constant-fold-uncaptured-variable-that-is-later-captured.js b/test/webkit/dfg-constant-fold-uncaptured-variable-that-is-later-captured.js
new file mode 100644 (file)
index 0000000..392f5fc
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that constant folding an access to an uncaptured variable that is captured later in the same basic block doesn't lead to assertion failures."
+);
+
+var thingy = 456;
+
+function bar() {
+    return thingy;
+}
+
+function baz(a) {
+    if (a) // Here we have an access to r2. The bug was concerned with our assertions thinking that this access was invalid.
+        return arguments; // Force r2 (see below) to get captured.
+}
+
+function foo(p, a) {
+    // The temporary variable corresponding to the 'bar' callee coming out of the ternary expression will be allocated by
+    // the bytecompiler to some virtual register, say r2. This expression is engineered so that (1) the virtual register
+    // chosen for the callee here is the same as the one that will be chosen for the first non-this argument below,
+    // (2) that the callee ends up being constant but requires CFA to prove it, and (3) that we actually load that constant
+    // using GetLocal (which happens because of the CheckFunction to check the callee).
+    var x = (a + 1) + (p ? bar : bar)();
+    // The temporary variable corresponding to the first non-this argument to baz will be allocated to the same virtual
+    // register (i.e. r2).
+    return baz(x);
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo(true, 5)[0]", "462");
diff --git a/test/webkit/dfg-convert-this-dom-window-expected.txt b/test/webkit/dfg-convert-this-dom-window-expected.txt
new file mode 100644 (file)
index 0000000..3816537
--- /dev/null
@@ -0,0 +1,1232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that we can correctly call Function.prototype.call in the DFG, but more precisely, that we give the correct this object in case it is undefined
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-convert-this-dom-window.js b/test/webkit/dfg-convert-this-dom-window.js
new file mode 100644 (file)
index 0000000..fa6d74c
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that we can correctly call Function.prototype.call in the DFG, but more precisely, that we give the correct this object in case it is undefined"
+);
+
+var myObject = { call: function() { return [myObject, "myObject.call"] } };
+var myFunction = function (arg1) { return [this, "myFunction", arg1] };
+var myFunctionWithCall = function (arg1) { return [this, "myFunctionWithCall", arg1] };
+myFunctionWithCall.call = function (arg1) { return [this, "myFunctionWithCall.call", arg1] };
+Function.prototype.aliasedCall = Function.prototype.call;
+
+for (var i = 0; i < 100; ++i) {
+    shouldBe("myObject.call()", '[myObject, "myObject.call"]');
+    shouldBe("myFunction('arg1')", '[this, "myFunction", "arg1"]');
+    shouldBe("myFunction.call(myObject, 'arg1')", '[myObject, "myFunction", "arg1"]');
+    shouldBe("myFunction.call()", '[this, "myFunction", undefined]');
+    shouldBe("myFunction.call(null)", '[this, "myFunction", undefined]');
+    shouldBe("myFunction.call(undefined)", '[this, "myFunction", undefined]');
+    shouldBe("myFunction.aliasedCall(myObject, 'arg1')", '[myObject, "myFunction", "arg1"]');
+    shouldBe("myFunction.aliasedCall()", '[this, "myFunction", undefined]');
+    shouldBe("myFunction.aliasedCall(null)", '[this, "myFunction", undefined]');
+    shouldBe("myFunction.aliasedCall(undefined)", '[this, "myFunction", undefined]');
+    shouldBe("myFunctionWithCall.call(myObject, 'arg1')", '[myFunctionWithCall, "myFunctionWithCall.call", myObject]');
+    shouldBe("myFunctionWithCall.aliasedCall(myObject, 'arg1')", '[myObject, "myFunctionWithCall", "arg1"]');
+}
diff --git a/test/webkit/dfg-convert-this-object-then-exit-on-other-expected.txt b/test/webkit/dfg-convert-this-object-then-exit-on-other-expected.txt
new file mode 100644 (file)
index 0000000..8934e62
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a convert_this optimized for the case where this is an object behaves correctly when you then pass null.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-convert-this-object-then-exit-on-other.js b/test/webkit/dfg-convert-this-object-then-exit-on-other.js
new file mode 100644 (file)
index 0000000..810b47e
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a convert_this optimized for the case where this is an object behaves correctly when you then pass null."
+);
+
+function foo() {
+    return this.x;
+}
+
+x = 42;
+
+for (var i = 0; i < 200; ++i) {
+    var me;
+    if (i < 150)
+        me = this;
+    else
+        me = null;
+    shouldBe("foo.call(me)", "42");
+}
diff --git a/test/webkit/dfg-convert-this-other-then-exit-on-object-expected.txt b/test/webkit/dfg-convert-this-other-then-exit-on-object-expected.txt
new file mode 100644 (file)
index 0000000..3724ebd
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a convert_this optimized for the case where this is null behaves correctly when you then pass an object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-convert-this-other-then-exit-on-object.js b/test/webkit/dfg-convert-this-other-then-exit-on-object.js
new file mode 100644 (file)
index 0000000..a2bb6cb
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a convert_this optimized for the case where this is null behaves correctly when you then pass an object."
+);
+
+function foo() {
+    return this.x;
+}
+
+x = 42;
+
+for (var i = 0; i < 200; ++i) {
+    var me;
+    if (i < 150)
+        me = null;
+    else
+        me = this;
+    shouldBe("foo.call(me)", "42");
+}
diff --git a/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-other-expected.txt b/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-other-expected.txt
new file mode 100644 (file)
index 0000000..9146995
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a convert_this optimized for the case where this is an object with polymorphic structure behaves correctly when you then pass null.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-other.js b/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-other.js
new file mode 100644 (file)
index 0000000..b2694d9
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a convert_this optimized for the case where this is an object with polymorphic structure behaves correctly when you then pass null."
+);
+
+function foo() {
+    return this.x;
+}
+
+x = 42;
+
+for (var i = 0; i < 1000; ++i) {
+    var me;
+    if (i < 150)
+        me = this;
+    else if (i < 950)
+        me = {x:42, y:62};
+    else
+        me = null;
+    shouldBe("foo.call(me)", "42");
+}
diff --git a/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-string-expected.txt b/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-string-expected.txt
new file mode 100644 (file)
index 0000000..b48d5c5
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a convert_this optimized for the case where this is an object with polymorphic structure behaves correctly when you then pass a string.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS foo.call(me) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-string.js b/test/webkit/dfg-convert-this-polymorphic-object-then-exit-on-string.js
new file mode 100644 (file)
index 0000000..14a4ecf
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a convert_this optimized for the case where this is an object with polymorphic structure behaves correctly when you then pass a string."
+);
+
+function foo() {
+    return this.x;
+}
+
+x = 42;
+
+String.prototype.x = 42;
+
+for (var i = 0; i < 1000; ++i) {
+    var me;
+    if (i < 150)
+        me = this;
+    else if (i < 950)
+        me = {x:42, y:62};
+    else
+        me = "hello";
+    shouldBe("foo.call(me)", "42");
+}
diff --git a/test/webkit/dfg-create-inlined-arguments-in-closure-inline-expected.txt b/test/webkit/dfg-create-inlined-arguments-in-closure-inline-expected.txt
new file mode 100644 (file)
index 0000000..4ab61f8
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that if the DFG tries to create inlined arguments from within a inlined call frame corresponding to a closure call, then we don't crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS value is 5
+PASS value is 6
+PASS value is 7
+PASS value is 8
+PASS value is 9
+PASS value is 10
+PASS value is 11
+PASS value is 12
+PASS value is 13
+PASS value is 14
+PASS value is 15
+PASS value is 16
+PASS value is 17
+PASS value is 18
+PASS value is 19
+PASS value is 20
+PASS value is 21
+PASS value is 22
+PASS value is 23
+PASS value is 24
+PASS value is 25
+PASS value is 26
+PASS value is 27
+PASS value is 28
+PASS value is 29
+PASS value is 30
+PASS value is 31
+PASS value is 32
+PASS value is 33
+PASS value is 34
+PASS value is 35
+PASS value is 36
+PASS value is 37
+PASS value is 38
+PASS value is 39
+PASS value is 40
+PASS value is 41
+PASS value is 42
+PASS value is 43
+PASS value is 44
+PASS value is 45
+PASS value is 46
+PASS value is 47
+PASS value is 48
+PASS value is 49
+PASS value is 50
+PASS value is 51
+PASS value is 52
+PASS value is 53
+PASS value is 54
+PASS value is 55
+PASS value is 56
+PASS value is 57
+PASS value is 58
+PASS value is 59
+PASS value is 60
+PASS value is 61
+PASS value is 62
+PASS value is 63
+PASS value is 64
+PASS value is 65
+PASS value is 66
+PASS value is 67
+PASS value is 68
+PASS value is 69
+PASS value is 70
+PASS value is 71
+PASS value is 72
+PASS value is 73
+PASS value is 74
+PASS value is 75
+PASS value is 76
+PASS value is 77
+PASS value is 78
+PASS value is 79
+PASS value is 80
+PASS value is 81
+PASS value is 82
+PASS value is 83
+PASS value is 84
+PASS value is 85
+PASS value is 86
+PASS value is 87
+PASS value is 88
+PASS value is 89
+PASS value is 90
+PASS value is 91
+PASS value is 92
+PASS value is 93
+PASS value is 94
+PASS value is 95
+PASS value is 96
+PASS value is 97
+PASS value is 98
+PASS value is 99
+PASS value is 100
+PASS value is 101
+PASS value is 102
+PASS value is 103
+PASS value is 104
+PASS value is 105
+PASS value is 106
+PASS value is 107
+PASS value is 108
+PASS value is 109
+PASS value is 110
+PASS value is 111
+PASS value is 112
+PASS value is 113
+PASS value is 114
+PASS value is 115
+PASS value is 116
+PASS value is 117
+PASS value is 118
+PASS value is 119
+PASS value is 120
+PASS value is 121
+PASS value is 122
+PASS value is 123
+PASS value is 124
+PASS value is 125
+PASS value is 126
+PASS value is 127
+PASS value is 128
+PASS value is 129
+PASS value is 130
+PASS value is 131
+PASS value is 132
+PASS value is 133
+PASS value is 134
+PASS value is 135
+PASS value is 136
+PASS value is 137
+PASS value is 138
+PASS value is 139
+PASS value is 140
+PASS value is 141
+PASS value is 142
+PASS value is 143
+PASS value is 144
+PASS value is 145
+PASS value is 146
+PASS value is 147
+PASS value is 148
+PASS value is 149
+PASS value is 150
+PASS value is 151
+PASS value is 152
+PASS value is 153
+PASS value is 154
+PASS value is 155
+PASS value is 156
+PASS value is 157
+PASS value is 158
+PASS value is 159
+PASS value is 160
+PASS value is 161
+PASS value is 162
+PASS value is 163
+PASS value is 164
+PASS value is 165
+PASS value is 166
+PASS value is 167
+PASS value is 168
+PASS value is 169
+PASS value is 170
+PASS value is 171
+PASS value is 172
+PASS value is 173
+PASS value is 174
+PASS value is 175
+PASS value is 176
+PASS value is 177
+PASS value is 178
+PASS value is 179
+PASS value is 180
+PASS value is 181
+PASS value is 182
+PASS value is 183
+PASS value is 184
+PASS value is 185
+PASS value is 186
+PASS value is 187
+PASS value is 188
+PASS value is 189
+PASS value is 190
+PASS value is 191
+PASS value is 192
+PASS value is 193
+PASS value is 194
+PASS value is 5.5
+PASS value is 5.5
+PASS value is 5.5
+PASS value is 5.5
+PASS value is 5.5
+PASS value is 5.5
+PASS value is 5.5
+PASS value is 5.5
+PASS value is 5.5
+PASS value is 5.5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-create-inlined-arguments-in-closure-inline.js b/test/webkit/dfg-create-inlined-arguments-in-closure-inline.js
new file mode 100644 (file)
index 0000000..371638c
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that if the DFG tries to create inlined arguments from within a inlined call frame corresponding to a closure call, then we don't crash."
+);
+
+function foo(x, f) {
+    return f(x, 5)[0];
+}
+
+for (var i = 0; i < 200; ++i) {
+    var value = foo(i < 190 ? i : 0.5, function() {
+        var result = 0;
+        for (var j = 0; j < arguments.length; ++j)
+            result += arguments[j];
+        return [result, arguments];
+    });
+    if (i < 190)
+        shouldBe("value", "" + (i + 5));
+    else
+        shouldBe("value", "5.5");
+}
diff --git a/test/webkit/dfg-cse-cfa-discrepancy-expected.txt b/test/webkit/dfg-cse-cfa-discrepancy-expected.txt
new file mode 100644 (file)
index 0000000..28f56d6
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests stability when the CFA finds a constant in block-local data flow over captured variables but the CSE doesn't because of differences in heap modeling.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS foo(i, i + 1) is 162
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-cse-cfa-discrepancy.js b/test/webkit/dfg-cse-cfa-discrepancy.js
new file mode 100644 (file)
index 0000000..a40e7e6
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests stability when the CFA finds a constant in block-local data flow over captured variables but the CSE doesn't because of differences in heap modeling."
+);
+
+function foo(a, b) {
+    var x = a + b;
+    var y = a - b;
+    function bar() {
+        var m = x + y;
+        var n = x - y;
+        function baz() {
+            return m + n;
+        }
+        m = 23;
+        if (m < n) {
+            m = 12;
+            y = 72; // PutScopedVar appears to clobber world in CSE but only clobbers structures in CFA.
+            return m + 6 + n + baz();
+        } else
+            return 91;
+    }
+    x = 42;
+    if (y < 0) {
+        return x + 5 + y + bar();
+    } else
+        return 73;
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(i, i + 1)", "162");
+
diff --git a/test/webkit/dfg-cse-dead-get-scoped-var-expected.txt b/test/webkit/dfg-cse-dead-get-scoped-var-expected.txt
new file mode 100644 (file)
index 0000000..6fb33cc
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that CSE doesn't try to match against a dead GetScopedVar.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-cse-dead-get-scoped-var.js b/test/webkit/dfg-cse-dead-get-scoped-var.js
new file mode 100644 (file)
index 0000000..aec600b
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that CSE doesn't try to match against a dead GetScopedVar."
+);
+
+function foo(a) {
+    var x = a;
+    return function(p) {
+        if (p) {
+            var tmp = x;
+            return x;
+        }
+        return 42;
+    };
+}
+
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo(i)(false)", "42");
+
diff --git a/test/webkit/dfg-dead-min-one-arg-expected.txt b/test/webkit/dfg-dead-min-one-arg-expected.txt
new file mode 100644 (file)
index 0000000..71e7c37
--- /dev/null
@@ -0,0 +1,282 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a dummy use of Math.min(a) at least speculates that its argument is indeed a number.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS result is 42
+PASS ok is 150
+PASS result is 37
+PASS ok is 151
+PASS result is 37
+PASS ok is 152
+PASS result is 37
+PASS ok is 153
+PASS result is 37
+PASS ok is 154
+PASS result is 37
+PASS ok is 155
+PASS result is 37
+PASS ok is 156
+PASS result is 37
+PASS ok is 157
+PASS result is 37
+PASS ok is 158
+PASS result is 37
+PASS ok is 159
+PASS result is 37
+PASS ok is 160
+PASS result is 37
+PASS ok is 161
+PASS result is 37
+PASS ok is 162
+PASS result is 37
+PASS ok is 163
+PASS result is 37
+PASS ok is 164
+PASS result is 37
+PASS ok is 165
+PASS result is 37
+PASS ok is 166
+PASS result is 37
+PASS ok is 167
+PASS result is 37
+PASS ok is 168
+PASS result is 37
+PASS ok is 169
+PASS result is 37
+PASS ok is 170
+PASS result is 37
+PASS ok is 171
+PASS result is 37
+PASS ok is 172
+PASS result is 37
+PASS ok is 173
+PASS result is 37
+PASS ok is 174
+PASS result is 37
+PASS ok is 175
+PASS result is 37
+PASS ok is 176
+PASS result is 37
+PASS ok is 177
+PASS result is 37
+PASS ok is 178
+PASS result is 37
+PASS ok is 179
+PASS result is 37
+PASS ok is 180
+PASS result is 37
+PASS ok is 181
+PASS result is 37
+PASS ok is 182
+PASS result is 37
+PASS ok is 183
+PASS result is 37
+PASS ok is 184
+PASS result is 37
+PASS ok is 185
+PASS result is 37
+PASS ok is 186
+PASS result is 37
+PASS ok is 187
+PASS result is 37
+PASS ok is 188
+PASS result is 37
+PASS ok is 189
+PASS result is 37
+PASS ok is 190
+PASS result is 37
+PASS ok is 191
+PASS result is 37
+PASS ok is 192
+PASS result is 37
+PASS ok is 193
+PASS result is 37
+PASS ok is 194
+PASS result is 37
+PASS ok is 195
+PASS result is 37
+PASS ok is 196
+PASS result is 37
+PASS ok is 197
+PASS result is 37
+PASS ok is 198
+PASS result is 37
+PASS ok is 199
+PASS result is 37
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-dead-min-one-arg.js b/test/webkit/dfg-dead-min-one-arg.js
new file mode 100644 (file)
index 0000000..48293be
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a dummy use of Math.min(a) at least speculates that its argument is indeed a number."
+);
+
+function foo(a) {
+    return Math.min(a.f);
+}
+
+var x = {f:42};
+var ok = null;
+var expected = 42;
+var empty = "";
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150) {
+        x = {f:{valueOf:function(){ ok = i; return 37; }}};
+        expected = 37;
+    }
+    var result = eval(empty + "foo(x)");
+    if (i >= 150)
+        shouldBe("ok", "" + i);
+    shouldBe("result", "" + expected);
+}
+
diff --git a/test/webkit/dfg-dead-min-two-args-expected.txt b/test/webkit/dfg-dead-min-two-args-expected.txt
new file mode 100644 (file)
index 0000000..2b7edc0
--- /dev/null
@@ -0,0 +1,532 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a dead use of Math.min(a,b) at least speculates that its arguments are indeed numbers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS ok is 150
+PASS result is 100
+PASS ok is 151
+PASS result is 100
+PASS ok is 152
+PASS result is 100
+PASS ok is 153
+PASS result is 100
+PASS ok is 154
+PASS result is 100
+PASS ok is 155
+PASS result is 100
+PASS ok is 156
+PASS result is 100
+PASS ok is 157
+PASS result is 100
+PASS ok is 158
+PASS result is 100
+PASS ok is 159
+PASS result is 100
+PASS ok is 160
+PASS result is 100
+PASS ok is 161
+PASS result is 100
+PASS ok is 162
+PASS result is 100
+PASS ok is 163
+PASS result is 100
+PASS ok is 164
+PASS result is 100
+PASS ok is 165
+PASS result is 100
+PASS ok is 166
+PASS result is 100
+PASS ok is 167
+PASS result is 100
+PASS ok is 168
+PASS result is 100
+PASS ok is 169
+PASS result is 100
+PASS ok is 170
+PASS result is 100
+PASS ok is 171
+PASS result is 100
+PASS ok is 172
+PASS result is 100
+PASS ok is 173
+PASS result is 100
+PASS ok is 174
+PASS result is 100
+PASS ok is 175
+PASS result is 100
+PASS ok is 176
+PASS result is 100
+PASS ok is 177
+PASS result is 100
+PASS ok is 178
+PASS result is 100
+PASS ok is 179
+PASS result is 100
+PASS ok is 180
+PASS result is 100
+PASS ok is 181
+PASS result is 100
+PASS ok is 182
+PASS result is 100
+PASS ok is 183
+PASS result is 100
+PASS ok is 184
+PASS result is 100
+PASS ok is 185
+PASS result is 100
+PASS ok is 186
+PASS result is 100
+PASS ok is 187
+PASS result is 100
+PASS ok is 188
+PASS result is 100
+PASS ok is 189
+PASS result is 100
+PASS ok is 190
+PASS result is 100
+PASS ok is 191
+PASS result is 100
+PASS ok is 192
+PASS result is 100
+PASS ok is 193
+PASS result is 100
+PASS ok is 194
+PASS result is 100
+PASS ok is 195
+PASS result is 100
+PASS ok is 196
+PASS result is 100
+PASS ok is 197
+PASS result is 100
+PASS ok is 198
+PASS result is 100
+PASS ok is 199
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS result is 100
+PASS ok is 150
+PASS result is 100
+PASS ok is 151
+PASS result is 100
+PASS ok is 152
+PASS result is 100
+PASS ok is 153
+PASS result is 100
+PASS ok is 154
+PASS result is 100
+PASS ok is 155
+PASS result is 100
+PASS ok is 156
+PASS result is 100
+PASS ok is 157
+PASS result is 100
+PASS ok is 158
+PASS result is 100
+PASS ok is 159
+PASS result is 100
+PASS ok is 160
+PASS result is 100
+PASS ok is 161
+PASS result is 100
+PASS ok is 162
+PASS result is 100
+PASS ok is 163
+PASS result is 100
+PASS ok is 164
+PASS result is 100
+PASS ok is 165
+PASS result is 100
+PASS ok is 166
+PASS result is 100
+PASS ok is 167
+PASS result is 100
+PASS ok is 168
+PASS result is 100
+PASS ok is 169
+PASS result is 100
+PASS ok is 170
+PASS result is 100
+PASS ok is 171
+PASS result is 100
+PASS ok is 172
+PASS result is 100
+PASS ok is 173
+PASS result is 100
+PASS ok is 174
+PASS result is 100
+PASS ok is 175
+PASS result is 100
+PASS ok is 176
+PASS result is 100
+PASS ok is 177
+PASS result is 100
+PASS ok is 178
+PASS result is 100
+PASS ok is 179
+PASS result is 100
+PASS ok is 180
+PASS result is 100
+PASS ok is 181
+PASS result is 100
+PASS ok is 182
+PASS result is 100
+PASS ok is 183
+PASS result is 100
+PASS ok is 184
+PASS result is 100
+PASS ok is 185
+PASS result is 100
+PASS ok is 186
+PASS result is 100
+PASS ok is 187
+PASS result is 100
+PASS ok is 188
+PASS result is 100
+PASS ok is 189
+PASS result is 100
+PASS ok is 190
+PASS result is 100
+PASS ok is 191
+PASS result is 100
+PASS ok is 192
+PASS result is 100
+PASS ok is 193
+PASS result is 100
+PASS ok is 194
+PASS result is 100
+PASS ok is 195
+PASS result is 100
+PASS ok is 196
+PASS result is 100
+PASS ok is 197
+PASS result is 100
+PASS ok is 198
+PASS result is 100
+PASS ok is 199
+PASS result is 100
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-dead-min-two-args.js b/test/webkit/dfg-dead-min-two-args.js
new file mode 100644 (file)
index 0000000..f723f43
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a dead use of Math.min(a,b) at least speculates that its arguments are indeed numbers."
+);
+
+function foo(a, b) {
+    Math.min(a.f, b.f);
+    return 100;
+}
+
+function bar(a, b) {
+    Math.min(a.f, b.f);
+    return 100;
+}
+
+var x = {f:42};
+var y = {f:43};
+var ok = null;
+var expected = 42;
+var empty = "";
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150) {
+        x = {f:{valueOf:function(){ ok = i; return 37; }}};
+        expected = 37;
+    }
+    var result = eval(empty + "foo(x, y)");
+    if (i >= 150)
+        shouldBe("ok", "" + i);
+    shouldBe("result", "100");
+}
+
+x = {f:42};
+y = {f:43};
+ok = null;
+expected = 42;
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150) {
+        y = {f:{valueOf:function(){ ok = i; return 37; }}};
+        expected = 37;
+    }
+    var result = eval(empty + "bar(x, y)");
+    if (i >= 150)
+        shouldBe("ok", "" + i);
+    shouldBe("result", "100");
+}
+
diff --git a/test/webkit/dfg-dead-redundant-get-array-length-expected.txt b/test/webkit/dfg-dead-redundant-get-array-length-expected.txt
new file mode 100644 (file)
index 0000000..e7dd654
--- /dev/null
@@ -0,0 +1,160 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that having a dead, and redundant, use of array.length doesn't cause compiler crashes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS foo([1, 2, 3]) is 3
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-dead-redundant-get-array-length.js b/test/webkit/dfg-dead-redundant-get-array-length.js
new file mode 100644 (file)
index 0000000..b82874f
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that having a dead, and redundant, use of array.length doesn't cause compiler crashes."
+);
+
+function foo(array) {
+    var x = array.length; // This is dead. If it wasn't, it would be redundant with the one below.
+    return array.length;
+}
+
+for (var i = 0; i < 128; ++i)
+    shouldBe("foo([1, 2, 3])", "3");
diff --git a/test/webkit/dfg-dead-speculation-expected.txt b/test/webkit/dfg-dead-speculation-expected.txt
new file mode 100644 (file)
index 0000000..d1fdf70
--- /dev/null
@@ -0,0 +1,432 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG will still perform speculations on dead things.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 84
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS foo(thingy, i) is 10
+PASS variable is 24
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-dead-speculation.js b/test/webkit/dfg-dead-speculation.js
new file mode 100644 (file)
index 0000000..7778f5a
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG will still perform speculations on dead things."
+);
+
+function foo(a, b) {
+    var x = a.f - b;
+    return 10;
+}
+
+var thingy = {f:42};
+var variable = 84;
+var expected = 84;
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150) {
+        thingy = {f:{valueOf:function(){ variable = 24; return 5; }}};
+        expected = 24;
+    }
+    shouldBe("foo(thingy, i)", "10");
+    shouldBe("variable", "" + expected);
+}
+
diff --git a/test/webkit/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes-expected.txt b/test/webkit/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes-expected.txt
new file mode 100644 (file)
index 0000000..2b2e3a1
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that code that is dead, unreachable, and contains a chain of nodes that use each other in an untyped way doesn't result in the IR getting corrupted.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes.js b/test/webkit/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes.js
new file mode 100644 (file)
index 0000000..bded985
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that code that is dead, unreachable, and contains a chain of nodes that use each other in an untyped way doesn't result in the IR getting corrupted."
+);
+
+function foo(a) {
+    function bar(p) {
+        if (p) {
+            var x = a; // It's dead and unreachable, and it involves a GetScopeVar(GetScopeRegisters(GetMyScope())).
+        }
+        return 5;
+    }
+    return bar;
+}
+
+// Since the function contains unreachable code we need a higher optimization threshold.
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo(42)(false)", "5");
diff --git a/test/webkit/dfg-dead-variable-on-exit-expected.txt b/test/webkit/dfg-dead-variable-on-exit-expected.txt
new file mode 100644 (file)
index 0000000..b93fc5b
--- /dev/null
@@ -0,0 +1,332 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that if a variable is dead on OSR exit, it will at least contain a valid JS value.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](2); foo(firstArg, secondArg) is 1
+PASS array[1](3); foo(firstArg, secondArg) is 1
+PASS array[2](4, 5); foo(firstArg, secondArg) is 1
+PASS array[2](5, 6); foo(firstArg, secondArg) is 1
+PASS array[3](6, 7, 8); foo(firstArg, secondArg) is 1
+PASS array[3](7, 8, 9); foo(firstArg, secondArg) is 1
+PASS array[4](8, 9, 10, 11); foo(firstArg, secondArg) is 1
+PASS array[4](9, 10, 11, 12); foo(firstArg, secondArg) is 1
+PASS array[5](10, 11, 12, 13, 14); foo(firstArg, secondArg) is 1
+PASS array[5](11, 12, 13, 14, 15); foo(firstArg, secondArg) is 1
+PASS array[6](12, 13, 14, 15, 16, 17); foo(firstArg, secondArg) is 1
+PASS array[6](13, 14, 15, 16, 17, 18); foo(firstArg, secondArg) is 1
+PASS array[7](14, 15, 16, 17, 18, 19, 20); foo(firstArg, secondArg) is 1
+PASS array[7](15, 16, 17, 18, 19, 20, 21); foo(firstArg, secondArg) is 1
+PASS array[8](16, 17, 18, 19, 20, 21, 22, 23); foo(firstArg, secondArg) is 1
+PASS array[8](17, 18, 19, 20, 21, 22, 23, 24); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](20); foo(firstArg, secondArg) is 1
+PASS array[1](21); foo(firstArg, secondArg) is 1
+PASS array[2](22, 23); foo(firstArg, secondArg) is 1
+PASS array[2](23, 24); foo(firstArg, secondArg) is 1
+PASS array[3](24, 25, 26); foo(firstArg, secondArg) is 1
+PASS array[3](25, 26, 27); foo(firstArg, secondArg) is 1
+PASS array[4](26, 27, 28, 29); foo(firstArg, secondArg) is 1
+PASS array[4](27, 28, 29, 30); foo(firstArg, secondArg) is 1
+PASS array[5](28, 29, 30, 31, 32); foo(firstArg, secondArg) is 1
+PASS array[5](29, 30, 31, 32, 33); foo(firstArg, secondArg) is 1
+PASS array[6](30, 31, 32, 33, 34, 35); foo(firstArg, secondArg) is 1
+PASS array[6](31, 32, 33, 34, 35, 36); foo(firstArg, secondArg) is 1
+PASS array[7](32, 33, 34, 35, 36, 37, 38); foo(firstArg, secondArg) is 1
+PASS array[7](33, 34, 35, 36, 37, 38, 39); foo(firstArg, secondArg) is 1
+PASS array[8](34, 35, 36, 37, 38, 39, 40, 41); foo(firstArg, secondArg) is 1
+PASS array[8](35, 36, 37, 38, 39, 40, 41, 42); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](38); foo(firstArg, secondArg) is 1
+PASS array[1](39); foo(firstArg, secondArg) is 1
+PASS array[2](40, 41); foo(firstArg, secondArg) is 1
+PASS array[2](41, 42); foo(firstArg, secondArg) is 1
+PASS array[3](42, 43, 44); foo(firstArg, secondArg) is 1
+PASS array[3](43, 44, 45); foo(firstArg, secondArg) is 1
+PASS array[4](44, 45, 46, 47); foo(firstArg, secondArg) is 1
+PASS array[4](45, 46, 47, 48); foo(firstArg, secondArg) is 1
+PASS array[5](46, 47, 48, 49, 50); foo(firstArg, secondArg) is 1
+PASS array[5](47, 48, 49, 50, 51); foo(firstArg, secondArg) is 1
+PASS array[6](48, 49, 50, 51, 52, 53); foo(firstArg, secondArg) is 1
+PASS array[6](49, 50, 51, 52, 53, 54); foo(firstArg, secondArg) is 1
+PASS array[7](50, 51, 52, 53, 54, 55, 56); foo(firstArg, secondArg) is 1
+PASS array[7](51, 52, 53, 54, 55, 56, 57); foo(firstArg, secondArg) is 1
+PASS array[8](52, 53, 54, 55, 56, 57, 58, 59); foo(firstArg, secondArg) is 1
+PASS array[8](53, 54, 55, 56, 57, 58, 59, 60); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](56); foo(firstArg, secondArg) is 1
+PASS array[1](57); foo(firstArg, secondArg) is 1
+PASS array[2](58, 59); foo(firstArg, secondArg) is 1
+PASS array[2](59, 60); foo(firstArg, secondArg) is 1
+PASS array[3](60, 61, 62); foo(firstArg, secondArg) is 1
+PASS array[3](61, 62, 63); foo(firstArg, secondArg) is 1
+PASS array[4](62, 63, 64, 65); foo(firstArg, secondArg) is 1
+PASS array[4](63, 64, 65, 66); foo(firstArg, secondArg) is 1
+PASS array[5](64, 65, 66, 67, 68); foo(firstArg, secondArg) is 1
+PASS array[5](65, 66, 67, 68, 69); foo(firstArg, secondArg) is 1
+PASS array[6](66, 67, 68, 69, 70, 71); foo(firstArg, secondArg) is 1
+PASS array[6](67, 68, 69, 70, 71, 72); foo(firstArg, secondArg) is 1
+PASS array[7](68, 69, 70, 71, 72, 73, 74); foo(firstArg, secondArg) is 1
+PASS array[7](69, 70, 71, 72, 73, 74, 75); foo(firstArg, secondArg) is 1
+PASS array[8](70, 71, 72, 73, 74, 75, 76, 77); foo(firstArg, secondArg) is 1
+PASS array[8](71, 72, 73, 74, 75, 76, 77, 78); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](74); foo(firstArg, secondArg) is 1
+PASS array[1](75); foo(firstArg, secondArg) is 1
+PASS array[2](76, 77); foo(firstArg, secondArg) is 1
+PASS array[2](77, 78); foo(firstArg, secondArg) is 1
+PASS array[3](78, 79, 80); foo(firstArg, secondArg) is 1
+PASS array[3](79, 80, 81); foo(firstArg, secondArg) is 1
+PASS array[4](80, 81, 82, 83); foo(firstArg, secondArg) is 1
+PASS array[4](81, 82, 83, 84); foo(firstArg, secondArg) is 1
+PASS array[5](82, 83, 84, 85, 86); foo(firstArg, secondArg) is 1
+PASS array[5](83, 84, 85, 86, 87); foo(firstArg, secondArg) is 1
+PASS array[6](84, 85, 86, 87, 88, 89); foo(firstArg, secondArg) is 1
+PASS array[6](85, 86, 87, 88, 89, 90); foo(firstArg, secondArg) is 1
+PASS array[7](86, 87, 88, 89, 90, 91, 92); foo(firstArg, secondArg) is 1
+PASS array[7](87, 88, 89, 90, 91, 92, 93); foo(firstArg, secondArg) is 1
+PASS array[8](88, 89, 90, 91, 92, 93, 94, 95); foo(firstArg, secondArg) is 1
+PASS array[8](89, 90, 91, 92, 93, 94, 95, 96); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](92); foo(firstArg, secondArg) is 1
+PASS array[1](93); foo(firstArg, secondArg) is 1
+PASS array[2](94, 95); foo(firstArg, secondArg) is 1
+PASS array[2](95, 96); foo(firstArg, secondArg) is 1
+PASS array[3](96, 97, 98); foo(firstArg, secondArg) is 1
+PASS array[3](97, 98, 99); foo(firstArg, secondArg) is 1
+PASS array[4](98, 99, 100, 101); foo(firstArg, secondArg) is 1
+PASS array[4](99, 100, 101, 102); foo(firstArg, secondArg) is 1
+PASS array[5](100, 101, 102, 103, 104); foo(firstArg, secondArg) is 1
+PASS array[5](101, 102, 103, 104, 105); foo(firstArg, secondArg) is 1
+PASS array[6](102, 103, 104, 105, 106, 107); foo(firstArg, secondArg) is 1
+PASS array[6](103, 104, 105, 106, 107, 108); foo(firstArg, secondArg) is 1
+PASS array[7](104, 105, 106, 107, 108, 109, 110); foo(firstArg, secondArg) is 1
+PASS array[7](105, 106, 107, 108, 109, 110, 111); foo(firstArg, secondArg) is 1
+PASS array[8](106, 107, 108, 109, 110, 111, 112, 113); foo(firstArg, secondArg) is 1
+PASS array[8](107, 108, 109, 110, 111, 112, 113, 114); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](110); foo(firstArg, secondArg) is 1
+PASS array[1](111); foo(firstArg, secondArg) is 1
+PASS array[2](112, 113); foo(firstArg, secondArg) is 1
+PASS array[2](113, 114); foo(firstArg, secondArg) is 1
+PASS array[3](114, 115, 116); foo(firstArg, secondArg) is 1
+PASS array[3](115, 116, 117); foo(firstArg, secondArg) is 1
+PASS array[4](116, 117, 118, 119); foo(firstArg, secondArg) is 1
+PASS array[4](117, 118, 119, 120); foo(firstArg, secondArg) is 1
+PASS array[5](118, 119, 120, 121, 122); foo(firstArg, secondArg) is 1
+PASS array[5](119, 120, 121, 122, 123); foo(firstArg, secondArg) is 1
+PASS array[6](120, 121, 122, 123, 124, 125); foo(firstArg, secondArg) is 1
+PASS array[6](121, 122, 123, 124, 125, 126); foo(firstArg, secondArg) is 1
+PASS array[7](122, 123, 124, 125, 126, 127, 128); foo(firstArg, secondArg) is 1
+PASS array[7](123, 124, 125, 126, 127, 128, 129); foo(firstArg, secondArg) is 1
+PASS array[8](124, 125, 126, 127, 128, 129, 130, 131); foo(firstArg, secondArg) is 1
+PASS array[8](125, 126, 127, 128, 129, 130, 131, 132); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](128); foo(firstArg, secondArg) is 1
+PASS array[1](129); foo(firstArg, secondArg) is 1
+PASS array[2](130, 131); foo(firstArg, secondArg) is 1
+PASS array[2](131, 132); foo(firstArg, secondArg) is 1
+PASS array[3](132, 133, 134); foo(firstArg, secondArg) is 1
+PASS array[3](133, 134, 135); foo(firstArg, secondArg) is 1
+PASS array[4](134, 135, 136, 137); foo(firstArg, secondArg) is 1
+PASS array[4](135, 136, 137, 138); foo(firstArg, secondArg) is 1
+PASS array[5](136, 137, 138, 139, 140); foo(firstArg, secondArg) is 1
+PASS array[5](137, 138, 139, 140, 141); foo(firstArg, secondArg) is 1
+PASS array[6](138, 139, 140, 141, 142, 143); foo(firstArg, secondArg) is 1
+PASS array[6](139, 140, 141, 142, 143, 144); foo(firstArg, secondArg) is 1
+PASS array[7](140, 141, 142, 143, 144, 145, 146); foo(firstArg, secondArg) is 1
+PASS array[7](141, 142, 143, 144, 145, 146, 147); foo(firstArg, secondArg) is 1
+PASS array[8](142, 143, 144, 145, 146, 147, 148, 149); foo(firstArg, secondArg) is 1
+PASS array[8](143, 144, 145, 146, 147, 148, 149, 150); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](146); foo(firstArg, secondArg) is 1
+PASS array[1](147); foo(firstArg, secondArg) is 1
+PASS array[2](148, 149); foo(firstArg, secondArg) is 1
+PASS array[2](149, 150); foo(firstArg, secondArg) is 1
+PASS array[3](150, 151, 152); foo(firstArg, secondArg) is 1
+PASS array[3](151, 152, 153); foo(firstArg, secondArg) is 1
+PASS array[4](152, 153, 154, 155); foo(firstArg, secondArg) is 1
+PASS array[4](153, 154, 155, 156); foo(firstArg, secondArg) is 1
+PASS array[5](154, 155, 156, 157, 158); foo(firstArg, secondArg) is 1
+PASS array[5](155, 156, 157, 158, 159); foo(firstArg, secondArg) is 1
+PASS array[6](156, 157, 158, 159, 160, 161); foo(firstArg, secondArg) is 1
+PASS array[6](157, 158, 159, 160, 161, 162); foo(firstArg, secondArg) is 1
+PASS array[7](158, 159, 160, 161, 162, 163, 164); foo(firstArg, secondArg) is 1
+PASS array[7](159, 160, 161, 162, 163, 164, 165); foo(firstArg, secondArg) is 1
+PASS array[8](160, 161, 162, 163, 164, 165, 166, 167); foo(firstArg, secondArg) is 1
+PASS array[8](161, 162, 163, 164, 165, 166, 167, 168); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](164); foo(firstArg, secondArg) is 1
+PASS array[1](165); foo(firstArg, secondArg) is 1
+PASS array[2](166, 167); foo(firstArg, secondArg) is 1
+PASS array[2](167, 168); foo(firstArg, secondArg) is 1
+PASS array[3](168, 169, 170); foo(firstArg, secondArg) is 1
+PASS array[3](169, 170, 171); foo(firstArg, secondArg) is 1
+PASS array[4](170, 171, 172, 173); foo(firstArg, secondArg) is 1
+PASS array[4](171, 172, 173, 174); foo(firstArg, secondArg) is 1
+PASS array[5](172, 173, 174, 175, 176); foo(firstArg, secondArg) is 1
+PASS array[5](173, 174, 175, 176, 177); foo(firstArg, secondArg) is 1
+PASS array[6](174, 175, 176, 177, 178, 179); foo(firstArg, secondArg) is 1
+PASS array[6](175, 176, 177, 178, 179, 180); foo(firstArg, secondArg) is 1
+PASS array[7](176, 177, 178, 179, 180, 181, 182); foo(firstArg, secondArg) is 1
+PASS array[7](177, 178, 179, 180, 181, 182, 183); foo(firstArg, secondArg) is 1
+PASS array[8](178, 179, 180, 181, 182, 183, 184, 185); foo(firstArg, secondArg) is 1
+PASS array[8](179, 180, 181, 182, 183, 184, 185, 186); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](182); foo(firstArg, secondArg) is 1
+PASS array[1](183); foo(firstArg, secondArg) is 1
+PASS array[2](184, 185); foo(firstArg, secondArg) is 1
+PASS array[2](185, 186); foo(firstArg, secondArg) is 1
+PASS array[3](186, 187, 188); foo(firstArg, secondArg) is 1
+PASS array[3](187, 188, 189); foo(firstArg, secondArg) is 1
+PASS array[4](188, 189, 190, 191); foo(firstArg, secondArg) is 1
+PASS array[4](189, 190, 191, 192); foo(firstArg, secondArg) is 1
+PASS array[5](190, 191, 192, 193, 194); foo(firstArg, secondArg) is 1
+PASS array[5](191, 192, 193, 194, 195); foo(firstArg, secondArg) is 1
+PASS array[6](192, 193, 194, 195, 196, 197); foo(firstArg, secondArg) is 1
+PASS array[6](193, 194, 195, 196, 197, 198); foo(firstArg, secondArg) is 1
+PASS array[7](194, 195, 196, 197, 198, 199, 200); foo(firstArg, secondArg) is 1
+PASS array[7](195, 196, 197, 198, 199, 200, 201); foo(firstArg, secondArg) is 1
+PASS array[8](196, 197, 198, 199, 200, 201, 202, 203); foo(firstArg, secondArg) is 1
+PASS array[8](197, 198, 199, 200, 201, 202, 203, 204); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](200); foo(firstArg, secondArg) is 1
+PASS array[1](201); foo(firstArg, secondArg) is 1
+PASS array[2](202, 203); foo(firstArg, secondArg) is 1
+PASS array[2](203, 204); foo(firstArg, secondArg) is 1
+PASS array[3](204, 205, 206); foo(firstArg, secondArg) is 1
+PASS array[3](205, 206, 207); foo(firstArg, secondArg) is 1
+PASS array[4](206, 207, 208, 209); foo(firstArg, secondArg) is 1
+PASS array[4](207, 208, 209, 210); foo(firstArg, secondArg) is 1
+PASS array[5](208, 209, 210, 211, 212); foo(firstArg, secondArg) is 1
+PASS array[5](209, 210, 211, 212, 213); foo(firstArg, secondArg) is 1
+PASS array[6](210, 211, 212, 213, 214, 215); foo(firstArg, secondArg) is 1
+PASS array[6](211, 212, 213, 214, 215, 216); foo(firstArg, secondArg) is 1
+PASS array[7](212, 213, 214, 215, 216, 217, 218); foo(firstArg, secondArg) is 1
+PASS array[7](213, 214, 215, 216, 217, 218, 219); foo(firstArg, secondArg) is 1
+PASS array[8](214, 215, 216, 217, 218, 219, 220, 221); foo(firstArg, secondArg) is 1
+PASS array[8](215, 216, 217, 218, 219, 220, 221, 222); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](218); foo(firstArg, secondArg) is 1
+PASS array[1](219); foo(firstArg, secondArg) is 1
+PASS array[2](220, 221); foo(firstArg, secondArg) is 1
+PASS array[2](221, 222); foo(firstArg, secondArg) is 1
+PASS array[3](222, 223, 224); foo(firstArg, secondArg) is 1
+PASS array[3](223, 224, 225); foo(firstArg, secondArg) is 1
+PASS array[4](224, 225, 226, 227); foo(firstArg, secondArg) is 1
+PASS array[4](225, 226, 227, 228); foo(firstArg, secondArg) is 1
+PASS array[5](226, 227, 228, 229, 230); foo(firstArg, secondArg) is 1
+PASS array[5](227, 228, 229, 230, 231); foo(firstArg, secondArg) is 1
+PASS array[6](228, 229, 230, 231, 232, 233); foo(firstArg, secondArg) is 1
+PASS array[6](229, 230, 231, 232, 233, 234); foo(firstArg, secondArg) is 1
+PASS array[7](230, 231, 232, 233, 234, 235, 236); foo(firstArg, secondArg) is 1
+PASS array[7](231, 232, 233, 234, 235, 236, 237); foo(firstArg, secondArg) is 1
+PASS array[8](232, 233, 234, 235, 236, 237, 238, 239); foo(firstArg, secondArg) is 1
+PASS array[8](233, 234, 235, 236, 237, 238, 239, 240); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](236); foo(firstArg, secondArg) is 1
+PASS array[1](237); foo(firstArg, secondArg) is 1
+PASS array[2](238, 239); foo(firstArg, secondArg) is 1
+PASS array[2](239, 240); foo(firstArg, secondArg) is 1
+PASS array[3](240, 241, 242); foo(firstArg, secondArg) is 1
+PASS array[3](241, 242, 243); foo(firstArg, secondArg) is 1
+PASS array[4](242, 243, 244, 245); foo(firstArg, secondArg) is 1
+PASS array[4](243, 244, 245, 246); foo(firstArg, secondArg) is 1
+PASS array[5](244, 245, 246, 247, 248); foo(firstArg, secondArg) is 1
+PASS array[5](245, 246, 247, 248, 249); foo(firstArg, secondArg) is 1
+PASS array[6](246, 247, 248, 249, 250, 251); foo(firstArg, secondArg) is 1
+PASS array[6](247, 248, 249, 250, 251, 252); foo(firstArg, secondArg) is 1
+PASS array[7](248, 249, 250, 251, 252, 253, 254); foo(firstArg, secondArg) is 1
+PASS array[7](249, 250, 251, 252, 253, 254, 255); foo(firstArg, secondArg) is 1
+PASS array[8](250, 251, 252, 253, 254, 255, 256, 257); foo(firstArg, secondArg) is 1
+PASS array[8](251, 252, 253, 254, 255, 256, 257, 258); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](254); foo(firstArg, secondArg) is 1
+PASS array[1](255); foo(firstArg, secondArg) is 1
+PASS array[2](256, 257); foo(firstArg, secondArg) is 1
+PASS array[2](257, 258); foo(firstArg, secondArg) is 1
+PASS array[3](258, 259, 260); foo(firstArg, secondArg) is 1
+PASS array[3](259, 260, 261); foo(firstArg, secondArg) is 1
+PASS array[4](260, 261, 262, 263); foo(firstArg, secondArg) is 1
+PASS array[4](261, 262, 263, 264); foo(firstArg, secondArg) is 1
+PASS array[5](262, 263, 264, 265, 266); foo(firstArg, secondArg) is 1
+PASS array[5](263, 264, 265, 266, 267); foo(firstArg, secondArg) is 1
+PASS array[6](264, 265, 266, 267, 268, 269); foo(firstArg, secondArg) is 1
+PASS array[6](265, 266, 267, 268, 269, 270); foo(firstArg, secondArg) is 1
+PASS array[7](266, 267, 268, 269, 270, 271, 272); foo(firstArg, secondArg) is 1
+PASS array[7](267, 268, 269, 270, 271, 272, 273); foo(firstArg, secondArg) is 1
+PASS array[8](268, 269, 270, 271, 272, 273, 274, 275); foo(firstArg, secondArg) is 1
+PASS array[8](269, 270, 271, 272, 273, 274, 275, 276); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](272); foo(firstArg, secondArg) is 1
+PASS array[1](273); foo(firstArg, secondArg) is 1
+PASS array[2](274, 275); foo(firstArg, secondArg) is 1
+PASS array[2](275, 276); foo(firstArg, secondArg) is 1
+PASS array[3](276, 277, 278); foo(firstArg, secondArg) is 1
+PASS array[3](277, 278, 279); foo(firstArg, secondArg) is 1
+PASS array[4](278, 279, 280, 281); foo(firstArg, secondArg) is 1
+PASS array[4](279, 280, 281, 282); foo(firstArg, secondArg) is 1
+PASS array[5](280, 281, 282, 283, 284); foo(firstArg, secondArg) is 1
+PASS array[5](281, 282, 283, 284, 285); foo(firstArg, secondArg) is 1
+PASS array[6](282, 283, 284, 285, 286, 287); foo(firstArg, secondArg) is 1
+PASS array[6](283, 284, 285, 286, 287, 288); foo(firstArg, secondArg) is 1
+PASS array[7](284, 285, 286, 287, 288, 289, 290); foo(firstArg, secondArg) is 1
+PASS array[7](285, 286, 287, 288, 289, 290, 291); foo(firstArg, secondArg) is 1
+PASS array[8](286, 287, 288, 289, 290, 291, 292, 293); foo(firstArg, secondArg) is 1
+PASS array[8](287, 288, 289, 290, 291, 292, 293, 294); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[0](); foo(firstArg, secondArg) is 1
+PASS array[1](290); foo(firstArg, secondArg) is 1
+PASS array[1](291); foo(firstArg, secondArg) is 1
+PASS array[2](292, 293); foo(firstArg, secondArg) is 1
+PASS array[2](293, 294); foo(firstArg, secondArg) is 1
+PASS array[3](294, 295, 296); foo(firstArg, secondArg) is 1
+PASS array[3](295, 296, 297); foo(firstArg, secondArg) is 1
+PASS array[4](296, 297, 298, 299); foo(firstArg, secondArg) is 1
+PASS array[4](297, 298, 299, 300); foo(firstArg, secondArg) is 1
+PASS array[5](298, 299, 300, 301, 302); foo(firstArg, secondArg) is 1
+PASS array[5](299, 300, 301, 302, 303); foo(firstArg, secondArg) is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-dead-variable-on-exit.js b/test/webkit/dfg-dead-variable-on-exit.js
new file mode 100644 (file)
index 0000000..0f9f48c
--- /dev/null
@@ -0,0 +1,87 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that if a variable is dead on OSR exit, it will at least contain a valid JS value."
+);
+
+var array = [];
+
+for (var i = 0; i < 9; ++i) {
+    var code = "";
+    code += "(function(";
+    for (var j = 0; j < i; ++j) {
+        if (j)
+            code += ", ";
+        code += "arg" + j;
+    }
+    code += ") {\n";
+    code += "    return ";
+    if (i) {
+        for (var j = 0; j < i; ++j) {
+            if (j)
+                code += " + ";
+            code += "arg" + j;
+        }
+    } else
+        code += "void 0";
+    code += ";\n";
+    code += "})";
+    array[i] = eval(code);
+}
+
+function foo(a, b) {
+    var x = 0;
+    if (a.f < b.f) {
+        var result = b.g - a.g;
+        x = !x;
+        return result;
+    } else {
+        var result = a.g - b.g;
+        x = [x];
+        return result;
+    }
+}
+
+var firstArg = {f:2, g:3};
+var secondArg = {f:3, g:4};
+
+for (var i = 0; i < 300; ++i) {
+    var code = "";
+    code += "array[" + (((i / 2) | 0) % array.length) + "](";
+    for (var j = 0; j < (((i / 2) | 0) % array.length); ++j) {
+        if (j)
+            code += ", ";
+        code += i + j;
+    }
+    if (i == 150) {
+        firstArg = {f:2, g:2.5};
+        secondArg = {f:3, g:3.5};
+    }
+    var tmp = firstArg;
+    firstArg = secondArg;
+    secondArg = tmp;
+    code += "); foo(firstArg, secondArg)";
+    shouldBe(code, "1");
+}
+
diff --git a/test/webkit/dfg-double-addition-simplify-to-int-expected.txt b/test/webkit/dfg-double-addition-simplify-to-int-expected.txt
new file mode 100644 (file)
index 0000000..7bb5f0a
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG doesn't get confused about an edge being a double edge after we perform CFG simplification.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS foo(42, true)[0] is 84
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-double-addition-simplify-to-int.js b/test/webkit/dfg-double-addition-simplify-to-int.js
new file mode 100644 (file)
index 0000000..3e12b11
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG doesn't get confused about an edge being a double edge after we perform CFG simplification."
+);
+
+function foo(a, p) {
+    var p2;
+    var x;
+    var y;
+    if (p)
+        p2 = true;
+    else
+        p2 = true;
+    if (p2)
+        x = a;
+    else
+        x = 0.5;
+    if (p2)
+        y = a;
+    else
+        y = 0.7;
+    var result = x + y;
+    return [result, [x, y], [x, y], [x, y]];
+}
+
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo(42, true)[0]", "84");
diff --git a/test/webkit/dfg-double-use-of-post-simplification-double-prediction-expected.txt b/test/webkit/dfg-double-use-of-post-simplification-double-prediction-expected.txt
new file mode 100644 (file)
index 0000000..b01ff7e
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests stability of the DFG compiler when you have a double use of a variable that is not revealed to be a double until after CFG simplification.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS foo(0.5) is 42.5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-double-use-of-post-simplification-double-prediction.js b/test/webkit/dfg-double-use-of-post-simplification-double-prediction.js
new file mode 100644 (file)
index 0000000..cf38579
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests stability of the DFG compiler when you have a double use of a variable that is not revealed to be a double until after CFG simplification."
+);
+
+function foo(a) {
+    var p = true;
+    var x;
+    if (p)
+        x = 42;
+    else
+        x = "yo";
+    return x + a;
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(0.5)", "42.5");
+
diff --git a/test/webkit/dfg-double-vote-fuzz-expected.txt b/test/webkit/dfg-double-vote-fuzz-expected.txt
new file mode 100644 (file)
index 0000000..0c7dea4
--- /dev/null
@@ -0,0 +1,289 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that the static analysis we use to infer if a variable should be a double doesn't crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Result value is 54939
+Result value is 55039
+Result value is 55039
+Result value is 55139
+Result value is 55039
+Result value is 55139
+Result value is 55139
+Result value is 55239
+Result value is 55039
+Result value is 55139
+Result value is 55139
+Result value is 55239
+Result value is 55139
+Result value is 55239
+Result value is 55239
+Result value is 55339
+Result value is 55821
+Result value is 55921
+Result value is 55921
+Result value is 56021
+Result value is 55921
+Result value is 56021
+Result value is 56021
+Result value is 56121
+Result value is 55921
+Result value is 56021
+Result value is 56021
+Result value is 56121
+Result value is 56021
+Result value is 56121
+Result value is 56121
+Result value is 56221
+Result value is 55828.5
+Result value is 55928.5
+Result value is 55928.5
+Result value is 56028.5
+Result value is 55928.5
+Result value is 56028.5
+Result value is 56028.5
+Result value is 56128.5
+Result value is 55928.5
+Result value is 56028.5
+Result value is 56028.5
+Result value is 56128.5
+Result value is 56028.5
+Result value is 56128.5
+Result value is 56128.5
+Result value is 56228.5
+Result value is 56710.5
+Result value is 56810.5
+Result value is 56810.5
+Result value is 56910.5
+Result value is 56810.5
+Result value is 56910.5
+Result value is 56910.5
+Result value is 57010.5
+Result value is 56810.5
+Result value is 56910.5
+Result value is 56910.5
+Result value is 57010.5
+Result value is 56910.5
+Result value is 57010.5
+Result value is 57010.5
+Result value is 57110.5
+Result value is 55834
+Result value is 55934
+Result value is 55934
+Result value is 56034
+Result value is 55934
+Result value is 56034
+Result value is 56034
+Result value is 56134
+Result value is 55934
+Result value is 56034
+Result value is 56034
+Result value is 56134
+Result value is 56034
+Result value is 56134
+Result value is 56134
+Result value is 56234
+Result value is 56716
+Result value is 56816
+Result value is 56816
+Result value is 56916
+Result value is 56816
+Result value is 56916
+Result value is 56916
+Result value is 57016
+Result value is 56816
+Result value is 56916
+Result value is 56916
+Result value is 57016
+Result value is 56916
+Result value is 57016
+Result value is 57016
+Result value is 57116
+Result value is 56723.5
+Result value is 56823.5
+Result value is 56823.5
+Result value is 56923.5
+Result value is 56823.5
+Result value is 56923.5
+Result value is 56923.5
+Result value is 57023.5
+Result value is 56823.5
+Result value is 56923.5
+Result value is 56923.5
+Result value is 57023.5
+Result value is 56923.5
+Result value is 57023.5
+Result value is 57023.5
+Result value is 57123.5
+Result value is 57605.5
+Result value is 57705.5
+Result value is 57705.5
+Result value is 57805.5
+Result value is 57705.5
+Result value is 57805.5
+Result value is 57805.5
+Result value is 57905.5
+Result value is 57705.5
+Result value is 57805.5
+Result value is 57805.5
+Result value is 57905.5
+Result value is 57805.5
+Result value is 57905.5
+Result value is 57905.5
+Result value is 58005.5
+Result value is 55887.5
+Result value is 55987.5
+Result value is 55987.5
+Result value is 56087.5
+Result value is 55987.5
+Result value is 56087.5
+Result value is 56087.5
+Result value is 56187.5
+Result value is 55987.5
+Result value is 56087.5
+Result value is 56087.5
+Result value is 56187.5
+Result value is 56087.5
+Result value is 56187.5
+Result value is 56187.5
+Result value is 56287.5
+Result value is 56769.5
+Result value is 56869.5
+Result value is 56869.5
+Result value is 56969.5
+Result value is 56869.5
+Result value is 56969.5
+Result value is 56969.5
+Result value is 57069.5
+Result value is 56869.5
+Result value is 56969.5
+Result value is 56969.5
+Result value is 57069.5
+Result value is 56969.5
+Result value is 57069.5
+Result value is 57069.5
+Result value is 57169.5
+Result value is 56777
+Result value is 56877
+Result value is 56877
+Result value is 56977
+Result value is 56877
+Result value is 56977
+Result value is 56977
+Result value is 57077
+Result value is 56877
+Result value is 56977
+Result value is 56977
+Result value is 57077
+Result value is 56977
+Result value is 57077
+Result value is 57077
+Result value is 57177
+Result value is 57659
+Result value is 57759
+Result value is 57759
+Result value is 57859
+Result value is 57759
+Result value is 57859
+Result value is 57859
+Result value is 57959
+Result value is 57759
+Result value is 57859
+Result value is 57859
+Result value is 57959
+Result value is 57859
+Result value is 57959
+Result value is 57959
+Result value is 58059
+Result value is 56782.5
+Result value is 56882.5
+Result value is 56882.5
+Result value is 56982.5
+Result value is 56882.5
+Result value is 56982.5
+Result value is 56982.5
+Result value is 57082.5
+Result value is 56882.5
+Result value is 56982.5
+Result value is 56982.5
+Result value is 57082.5
+Result value is 56982.5
+Result value is 57082.5
+Result value is 57082.5
+Result value is 57182.5
+Result value is 57664.5
+Result value is 57764.5
+Result value is 57764.5
+Result value is 57864.5
+Result value is 57764.5
+Result value is 57864.5
+Result value is 57864.5
+Result value is 57964.5
+Result value is 57764.5
+Result value is 57864.5
+Result value is 57864.5
+Result value is 57964.5
+Result value is 57864.5
+Result value is 57964.5
+Result value is 57964.5
+Result value is 58064.5
+Result value is 57672
+Result value is 57772
+Result value is 57772
+Result value is 57872
+Result value is 57772
+Result value is 57872
+Result value is 57872
+Result value is 57972
+Result value is 57772
+Result value is 57872
+Result value is 57872
+Result value is 57972
+Result value is 57872
+Result value is 57972
+Result value is 57972
+Result value is 58072
+Result value is 58554
+Result value is 58654
+Result value is 58654
+Result value is 58754
+Result value is 58654
+Result value is 58754
+Result value is 58754
+Result value is 58854
+Result value is 58654
+Result value is 58754
+Result value is 58754
+Result value is 58854
+Result value is 58754
+Result value is 58854
+Result value is 58854
+Result value is 58954
+PASS grandResult is 14578304
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-double-vote-fuzz.js b/test/webkit/dfg-double-vote-fuzz.js
new file mode 100644 (file)
index 0000000..266bc15
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that the static analysis we use to infer if a variable should be a double doesn't crash."
+);
+
+var grandResult = 0;
+
+for (var i = 0; i < 256; ++i) {
+    code  = "function foo(o, a, b) {\n";
+    code += "    var x = 0;\n";
+    code += "    var c = a + b;\n";
+    for (var j = 0; j < 8; ++j)
+        code += "    var " + String.fromCharCode("d".charCodeAt(0) + j) + " = " + ((i & (1 << ((j / 2) | 0))) ? "0.5" : "0") + ";\n";
+    code += "    for (var __i = 0; __i < 10; ++__i) {\n";
+    code += "        if (a + b + 1 > __i) {\n";
+    code += "            c = d;\n";
+    code += "            x += c;\n";
+    code += "        }\n";
+    code += "        if (a + b + 2 > __i) {\n";
+    code += "            c = e;\n";
+    code += "            x += c;\n";
+    code += "        }\n";
+    code += "        if (a + b + 3 > __i) {\n";
+    code += "            c = f;\n";
+    code += "            x += c;\n";
+    code += "        }\n";
+    code += "        if (a + b + 4 > __i) {\n";
+    code += "            c = g;\n";
+    code += "            x += c;\n";
+    code += "        }\n";
+    code += "        if (a + b + 5 > __i) {\n";
+    code += "            c = h;\n";
+    code += "            x += c;\n";
+    code += "        }\n";
+    code += "        if (a + b + 6 > __i) {\n";
+    code += "            c = i;\n";
+    code += "            x += c;\n";
+    code += "        }\n";
+    code += "        if (a + b + 7 > __i) {\n";
+    code += "            c = j;\n";
+    code += "            x += c;\n";
+    code += "        }\n";
+    code += "        if (a + b + 8 > __i) {\n";
+    code += "            c = k;\n";
+    code += "            x += c;\n";
+    code += "        }\n";
+    for (var j = 0; j < 8; ++j) {
+        code += "        if (a + b + " + (9 + j) + " > __i)\n";
+        code += "            " + String.fromCharCode("d".charCodeAt(0) + j) + " = __i + " + j + " + " + ((i & (1 << (((j / 2) | 0) + 4))) ? "0.5" : "0") + ";\n";
+    }
+    code += "    }\n";
+    code += "    return x + c;\n";
+    code += "}\n";
+    code += "\n";
+    code += "var result = 0;\n"
+    code += "for (var __j = 0; __j < 100; ++__j) {\n";
+    code += "    result += foo({}, __j, __j + 1);\n";
+    code += "}\n";
+    code += "\n";
+    code += "result";
+
+    var theResult = eval(code);
+    debug("Result value is " + theResult);
+    grandResult += theResult;
+}
+
+shouldBe("grandResult", "14578304");
+
+
diff --git a/test/webkit/dfg-ensure-array-storage-on-string-expected.txt b/test/webkit/dfg-ensure-array-storage-on-string-expected.txt
new file mode 100644 (file)
index 0000000..bb89fa6
--- /dev/null
@@ -0,0 +1,1233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Checks that trying to arrayify a string to have array storage doesn't crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo("hello") is "0hello"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-ensure-array-storage-on-string.js b/test/webkit/dfg-ensure-array-storage-on-string.js
new file mode 100644 (file)
index 0000000..1b170fd
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Checks that trying to arrayify a string to have array storage doesn't crash."
+);
+
+function foo(array) {
+    var result = 0;
+    for (var i = 0; i < array.length; ++i)
+        result += array[i];
+    return result;
+}
+
+var array = [1, 2, 3];
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(array)", "6");
+
+array = [1, , 3];
+array.__defineGetter__(1, function() { return 6; });
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo(array)", "10");
+
+shouldBe("foo(\"hello\")", "\"0hello\"");
diff --git a/test/webkit/dfg-ensure-array-storage-on-window-expected.txt b/test/webkit/dfg-ensure-array-storage-on-window-expected.txt
new file mode 100644 (file)
index 0000000..eada7d1
--- /dev/null
@@ -0,0 +1,1233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that passing the global object to an array access that will arrayify to ArrayWithArrayStorage doesn't break things.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(array) is 10
+PASS foo(w) is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-ensure-array-storage-on-window.js b/test/webkit/dfg-ensure-array-storage-on-window.js
new file mode 100644 (file)
index 0000000..194aeda
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that passing the global object to an array access that will arrayify to ArrayWithArrayStorage doesn't break things."
+);
+
+function foo(array) {
+    var result = 0;
+    for (var i = 0; i < array.length; ++i)
+        result += array[i];
+    return result;
+}
+
+var array = [1, 2, 3];
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(array)", "6");
+
+array = [1, , 3];
+array.__defineGetter__(1, function() { return 6; });
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo(array)", "10");
+
+var w = this;
+w[0] = 1;
+w.length = 1;
+shouldBe("foo(w)", "1");
diff --git a/test/webkit/dfg-ensure-contiguous-on-string-expected.txt b/test/webkit/dfg-ensure-contiguous-on-string-expected.txt
new file mode 100644 (file)
index 0000000..3b054ef
--- /dev/null
@@ -0,0 +1,1233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Checks that trying to arrayify a string doesn't crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 6
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo(array) is 4
+PASS foo("hello") is "0hello"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-ensure-contiguous-on-string.js b/test/webkit/dfg-ensure-contiguous-on-string.js
new file mode 100644 (file)
index 0000000..a9e8937
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Checks that trying to arrayify a string doesn't crash."
+);
+
+function foo(array) {
+    var result = 0;
+    for (var i = 0; i < array.length; ++i)
+        result += array[i];
+    return result;
+}
+
+var array = [1, 2, 3];
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(array)", "6");
+
+array = [1, false, 3];
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo(array)", "4");
+
+shouldBe("foo(\"hello\")", "\"0hello\"");
diff --git a/test/webkit/dfg-ensure-non-array-array-storage-on-window-expected.txt b/test/webkit/dfg-ensure-non-array-array-storage-on-window-expected.txt
new file mode 100644 (file)
index 0000000..c612dd8
--- /dev/null
@@ -0,0 +1,2437 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that passing the global object to an array access that will arrayify to NonArrayWithArrayStorage doesn't break things.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 6
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(array) is 10
+PASS otherArray[1] is 42
+PASS foo(w) is 1
+PASS thingy is false
+PASS thingy is 42
+PASS foo(w) is 1
+PASS foo(w) is 0/0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-ensure-non-array-array-storage-on-window.js b/test/webkit/dfg-ensure-non-array-array-storage-on-window.js
new file mode 100644 (file)
index 0000000..3ae47c5
--- /dev/null
@@ -0,0 +1,88 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that passing the global object to an array access that will arrayify to NonArrayWithArrayStorage doesn't break things."
+);
+
+function foo(array) {
+    var result = 0;
+    for (var i = 0; i < array.length; ++i)
+        result += array[i];
+    return result;
+}
+
+function bar(array) {
+    array[1] = 42;
+}
+
+var array = {};
+array.length = 3;
+array[0] = 1;
+array[1] = 2;
+array[2] = 3;
+for (var i = 0; i < 200; ++i) {
+    shouldBe("foo(array)", "6");
+
+    var otherArray = {};
+    bar(otherArray);
+    shouldBe("otherArray[1]", "42");
+}
+
+for (var i = 0; i < 1000; ++i) {
+    // Do strange things to ensure that the get_by_id on length goes polymorphic.
+    var array = {};
+    if (i % 2)
+        array.x = 42;
+    array.length = 3;
+    array[0] = 1;
+    array[2] = 3;
+    array.__defineGetter__(1, function() { return 6; });
+
+    shouldBe("foo(array)", "10");
+
+    var otherArray = {};
+    otherArray.__defineSetter__(0, function(value) { throw "error"; });
+    bar(otherArray);
+    shouldBe("otherArray[1]", "42");
+}
+
+var w = this;
+w[0] = 1;
+w.length = 1;
+var thingy = false;
+w.__defineSetter__(1, function(value) { thingy = value; });
+shouldBe("foo(w)", "1");
+shouldBe("thingy", "false");
+
+// At this point we check to make sure that bar doesn't end up either creating array storage for
+// the window proxy, or equally badly, storing to the already created array storage on the proxy
+// (since foo() may have made the mistake of creating array storage). That's why we do the setter
+// thingy, to detect that for index 1 we fall through the proxy to the real window object.
+bar(w);
+
+shouldBe("thingy", "42");
+shouldBe("foo(w)", "1");
+w.length = 2;
+shouldBe("foo(w)", "0/0");
+
diff --git a/test/webkit/dfg-exception-expected.txt b/test/webkit/dfg-exception-expected.txt
new file mode 100644 (file)
index 0000000..55ec05e
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that exceptions are thrown correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS caughtException is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-exception.js b/test/webkit/dfg-exception.js
new file mode 100644 (file)
index 0000000..5126b1e
--- /dev/null
@@ -0,0 +1,113 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that exceptions are thrown correctly."
+);
+
+// A large function containing a try/catch - this prevent DFG compilation.
+function doesntDFGCompile()
+{
+    function callMe() {};
+
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+    callMe(0,1,2,3,4,5,6,7,8,9);
+
+    try {
+        return 1;
+    } catch (e) {
+        return 2;
+    }
+};
+
+function test(x)
+{
+    return x();
+};
+
+// warmup the test method
+for (i = 0; i < 200; ++i)
+    test(doesntDFGCompile);
+
+//
+var caughtException = false;
+try {
+    test();
+} catch (e) {
+    caughtException = true;
+}
+
+shouldBe("caughtException", 'true');
+var successfullyParsed = true;
diff --git a/test/webkit/dfg-float32-array-nan-expected.txt b/test/webkit/dfg-float32-array-nan-expected.txt
new file mode 100644 (file)
index 0000000..d92eae4
--- /dev/null
@@ -0,0 +1,234 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens in the DFG JIT if we load from a Float32 array that contains a weirdly formatted NaN.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+-4587521
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+NaN
+PASS "" + foo(floatView) is "NaN"
+I didn't crash, which is a good thing.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-float32-array-nan.js b/test/webkit/dfg-float32-array-nan.js
new file mode 100644 (file)
index 0000000..4a62f40
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens in the DFG JIT if we load from a Float32 array that contains a weirdly formatted NaN."
+);
+
+var buffer = new ArrayBuffer(4);
+
+var int32View = new Int32Array(buffer);
+var floatView = new Float32Array(buffer);
+
+int32View[0] = -4587521;
+
+debug(int32View[0]);
+
+function foo(o) {
+    debug(o[0]);
+    return o[0];
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("\"\" + foo(floatView)", "\"NaN\"");
+
+debug("I didn't crash, which is a good thing.");
diff --git a/test/webkit/dfg-flush-get-local-expected.txt b/test/webkit/dfg-flush-get-local-expected.txt
new file mode 100644 (file)
index 0000000..ea7e368
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that if we emit a Flush of a GetLocal, we flush the source of the GetLocal.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is 500000
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-flush-get-local.js b/test/webkit/dfg-flush-get-local.js
new file mode 100644 (file)
index 0000000..4dc8338
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that if we emit a Flush of a GetLocal, we flush the source of the GetLocal."
+);
+
+function foo(a, b) {
+    return a.f + a.g + b;
+}
+
+function fuzz(a, b) {
+    if (a < b)
+        return a - b;
+    else
+        return b - a;
+}
+
+function bar(a, b) {
+    return foo({f:(a < b ? a - b : b - a), g:a}, b);
+}
+
+var result = 0;
+for (var i = 0; i < 1000; ++i)
+    result += bar(i, 1000 - i);
+
+shouldBe("result", "500000");
diff --git a/test/webkit/dfg-force-exit-then-sparse-conditional-constant-prop-in-loop-expected.txt b/test/webkit/dfg-force-exit-then-sparse-conditional-constant-prop-in-loop-expected.txt
new file mode 100644 (file)
index 0000000..cd9a3fd
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Checks that increased aggressiveness in sparse conditional constant propagation resultin from a node being proven to be force exit does not lead to a cascade of unsound decisions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS foo(array) is 8746
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-force-exit-then-sparse-conditional-constant-prop-in-loop.js b/test/webkit/dfg-force-exit-then-sparse-conditional-constant-prop-in-loop.js
new file mode 100644 (file)
index 0000000..6516ac4
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Checks that increased aggressiveness in sparse conditional constant propagation resultin from a node being proven to be force exit does not lead to a cascade of unsound decisions."
+);
+
+function foo(a) {
+    var i;
+    if (a.push)
+        i = 0;
+    else
+        i = a;
+    var result = 0;
+    while (i < 10) {
+        result += a[i];
+        i++;
+    }
+    return result;
+}
+
+var array = [54, 5432, 1234, 54, 1235, 64, 75, 532, 64, 2];
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(array)", "8746");
diff --git a/test/webkit/dfg-get-by-val-clobber-expected.txt b/test/webkit/dfg-get-by-val-clobber-expected.txt
new file mode 100644 (file)
index 0000000..8a385fd
--- /dev/null
@@ -0,0 +1,3032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that common subexpression elimination knows how to accurately model PutBuVal.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 0
+PASS doAccesses(array1, array1, i % 4, 0, i) is 0
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 1
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 2
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 3
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 4
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 5
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 6
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 7
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 8
+PASS doAccesses(array1, array1, i % 4, 0, i) is 8
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 9
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 10
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 11
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 12
+PASS doAccesses(array1, array1, i % 4, 0, i) is 12
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 13
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 14
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 15
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 16
+PASS doAccesses(array1, array1, i % 4, 0, i) is 16
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 17
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 18
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 19
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 20
+PASS doAccesses(array1, array1, i % 4, 0, i) is 20
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 21
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 22
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 23
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 24
+PASS doAccesses(array1, array1, i % 4, 0, i) is 24
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 25
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 26
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 27
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 28
+PASS doAccesses(array1, array1, i % 4, 0, i) is 28
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 29
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 30
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 31
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 32
+PASS doAccesses(array1, array1, i % 4, 0, i) is 32
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 33
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 34
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 35
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 36
+PASS doAccesses(array1, array1, i % 4, 0, i) is 36
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 37
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 38
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 39
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 40
+PASS doAccesses(array1, array1, i % 4, 0, i) is 40
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 41
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 42
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 43
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 44
+PASS doAccesses(array1, array1, i % 4, 0, i) is 44
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 45
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 46
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 47
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 48
+PASS doAccesses(array1, array1, i % 4, 0, i) is 48
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 49
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 50
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 51
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 52
+PASS doAccesses(array1, array1, i % 4, 0, i) is 52
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 53
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 54
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 55
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 56
+PASS doAccesses(array1, array1, i % 4, 0, i) is 56
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 57
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 58
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 59
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 60
+PASS doAccesses(array1, array1, i % 4, 0, i) is 60
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 61
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 62
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 63
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 64
+PASS doAccesses(array1, array1, i % 4, 0, i) is 64
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 65
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 66
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 67
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 68
+PASS doAccesses(array1, array1, i % 4, 0, i) is 68
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 69
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 70
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 71
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 72
+PASS doAccesses(array1, array1, i % 4, 0, i) is 72
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 73
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 74
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 75
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 76
+PASS doAccesses(array1, array1, i % 4, 0, i) is 76
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 77
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 78
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 79
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 80
+PASS doAccesses(array1, array1, i % 4, 0, i) is 80
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 81
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 82
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 83
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 84
+PASS doAccesses(array1, array1, i % 4, 0, i) is 84
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 85
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 86
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 87
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 88
+PASS doAccesses(array1, array1, i % 4, 0, i) is 88
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 89
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 90
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 91
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 92
+PASS doAccesses(array1, array1, i % 4, 0, i) is 92
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 93
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 94
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 95
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 96
+PASS doAccesses(array1, array1, i % 4, 0, i) is 96
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 97
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 98
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 99
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 100
+PASS doAccesses(array1, array1, i % 4, 0, i) is 100
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 101
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 102
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 103
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 104
+PASS doAccesses(array1, array1, i % 4, 0, i) is 104
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 105
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 106
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 107
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 108
+PASS doAccesses(array1, array1, i % 4, 0, i) is 108
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 109
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 110
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 111
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 112
+PASS doAccesses(array1, array1, i % 4, 0, i) is 112
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 113
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 114
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 115
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 116
+PASS doAccesses(array1, array1, i % 4, 0, i) is 116
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 117
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 118
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 119
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 120
+PASS doAccesses(array1, array1, i % 4, 0, i) is 120
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 121
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 122
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 123
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 124
+PASS doAccesses(array1, array1, i % 4, 0, i) is 124
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 125
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 126
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 127
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 128
+PASS doAccesses(array1, array1, i % 4, 0, i) is 128
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 129
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 130
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 131
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 132
+PASS doAccesses(array1, array1, i % 4, 0, i) is 132
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 133
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 134
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 135
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 136
+PASS doAccesses(array1, array1, i % 4, 0, i) is 136
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 137
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 138
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 139
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 140
+PASS doAccesses(array1, array1, i % 4, 0, i) is 140
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 141
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 142
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 143
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 144
+PASS doAccesses(array1, array1, i % 4, 0, i) is 144
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 145
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 146
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 147
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 148
+PASS doAccesses(array1, array1, i % 4, 0, i) is 148
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 149
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 150
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 151
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 152
+PASS doAccesses(array1, array1, i % 4, 0, i) is 152
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 153
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 154
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 155
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 156
+PASS doAccesses(array1, array1, i % 4, 0, i) is 156
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 157
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 158
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 159
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 160
+PASS doAccesses(array1, array1, i % 4, 0, i) is 160
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 161
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 162
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 163
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 164
+PASS doAccesses(array1, array1, i % 4, 0, i) is 164
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 165
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 166
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 167
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 168
+PASS doAccesses(array1, array1, i % 4, 0, i) is 168
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 169
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 170
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 171
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 172
+PASS doAccesses(array1, array1, i % 4, 0, i) is 172
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 173
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 174
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 175
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 176
+PASS doAccesses(array1, array1, i % 4, 0, i) is 176
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 177
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 178
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 179
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 180
+PASS doAccesses(array1, array1, i % 4, 0, i) is 180
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 181
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 182
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 183
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 184
+PASS doAccesses(array1, array1, i % 4, 0, i) is 184
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 185
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 186
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 187
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 188
+PASS doAccesses(array1, array1, i % 4, 0, i) is 188
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 189
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 190
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 191
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 192
+PASS doAccesses(array1, array1, i % 4, 0, i) is 192
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 193
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 194
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 195
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 196
+PASS doAccesses(array1, array1, i % 4, 0, i) is 196
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 197
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 198
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 199
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 200
+PASS doAccesses(array1, array1, i % 4, 0, i) is 200
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 201
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 202
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 203
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 204
+PASS doAccesses(array1, array1, i % 4, 0, i) is 204
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 205
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 206
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 207
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 208
+PASS doAccesses(array1, array1, i % 4, 0, i) is 208
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 209
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 210
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 211
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 212
+PASS doAccesses(array1, array1, i % 4, 0, i) is 212
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 213
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 214
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 215
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 216
+PASS doAccesses(array1, array1, i % 4, 0, i) is 216
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 217
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 218
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 219
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 220
+PASS doAccesses(array1, array1, i % 4, 0, i) is 220
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 221
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 222
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 223
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 224
+PASS doAccesses(array1, array1, i % 4, 0, i) is 224
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 225
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 226
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 227
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 228
+PASS doAccesses(array1, array1, i % 4, 0, i) is 228
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 229
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 230
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 231
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 232
+PASS doAccesses(array1, array1, i % 4, 0, i) is 232
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 233
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 234
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 235
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 236
+PASS doAccesses(array1, array1, i % 4, 0, i) is 236
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 237
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 238
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 239
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 240
+PASS doAccesses(array1, array1, i % 4, 0, i) is 240
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 241
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 242
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 243
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 244
+PASS doAccesses(array1, array1, i % 4, 0, i) is 244
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 245
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 246
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 247
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 248
+PASS doAccesses(array1, array1, i % 4, 0, i) is 248
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 249
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 250
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 251
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 252
+PASS doAccesses(array1, array1, i % 4, 0, i) is 252
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 253
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 254
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 255
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 256
+PASS doAccesses(array1, array1, i % 4, 0, i) is 256
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 257
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 258
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 259
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 260
+PASS doAccesses(array1, array1, i % 4, 0, i) is 260
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 261
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 262
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 263
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 264
+PASS doAccesses(array1, array1, i % 4, 0, i) is 264
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 265
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 266
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 267
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 268
+PASS doAccesses(array1, array1, i % 4, 0, i) is 268
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 269
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 270
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 271
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 272
+PASS doAccesses(array1, array1, i % 4, 0, i) is 272
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 273
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 274
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 275
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 276
+PASS doAccesses(array1, array1, i % 4, 0, i) is 276
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 277
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 278
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 279
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 280
+PASS doAccesses(array1, array1, i % 4, 0, i) is 280
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 281
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 282
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 283
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 284
+PASS doAccesses(array1, array1, i % 4, 0, i) is 284
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 285
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 286
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 287
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 288
+PASS doAccesses(array1, array1, i % 4, 0, i) is 288
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 289
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 290
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 291
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 292
+PASS doAccesses(array1, array1, i % 4, 0, i) is 292
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 293
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 294
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 295
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 296
+PASS doAccesses(array1, array1, i % 4, 0, i) is 296
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 297
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 298
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 299
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 300
+PASS doAccesses(array1, array1, i % 4, 0, i) is 300
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 301
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 302
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 303
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 304
+PASS doAccesses(array1, array1, i % 4, 0, i) is 304
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 305
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 306
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 307
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 308
+PASS doAccesses(array1, array1, i % 4, 0, i) is 308
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 309
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 310
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 311
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 312
+PASS doAccesses(array1, array1, i % 4, 0, i) is 312
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 313
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 314
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 315
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 316
+PASS doAccesses(array1, array1, i % 4, 0, i) is 316
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 317
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 318
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 319
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 320
+PASS doAccesses(array1, array1, i % 4, 0, i) is 320
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 321
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 322
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 323
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 324
+PASS doAccesses(array1, array1, i % 4, 0, i) is 324
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 325
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 326
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 327
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 328
+PASS doAccesses(array1, array1, i % 4, 0, i) is 328
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 329
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 330
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 331
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 332
+PASS doAccesses(array1, array1, i % 4, 0, i) is 332
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 333
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 334
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 335
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 336
+PASS doAccesses(array1, array1, i % 4, 0, i) is 336
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 337
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 338
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 339
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 340
+PASS doAccesses(array1, array1, i % 4, 0, i) is 340
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 341
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 342
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 343
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 344
+PASS doAccesses(array1, array1, i % 4, 0, i) is 344
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 345
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 346
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 347
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 348
+PASS doAccesses(array1, array1, i % 4, 0, i) is 348
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 349
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 350
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 351
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 352
+PASS doAccesses(array1, array1, i % 4, 0, i) is 352
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 353
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 354
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 355
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 356
+PASS doAccesses(array1, array1, i % 4, 0, i) is 356
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 357
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 358
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 359
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 360
+PASS doAccesses(array1, array1, i % 4, 0, i) is 360
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 361
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 362
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 363
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 364
+PASS doAccesses(array1, array1, i % 4, 0, i) is 364
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 365
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 366
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 367
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 368
+PASS doAccesses(array1, array1, i % 4, 0, i) is 368
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 369
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 370
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 371
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 372
+PASS doAccesses(array1, array1, i % 4, 0, i) is 372
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 373
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 374
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 375
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 376
+PASS doAccesses(array1, array1, i % 4, 0, i) is 376
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 377
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 378
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 379
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 380
+PASS doAccesses(array1, array1, i % 4, 0, i) is 380
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 381
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 382
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 383
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 384
+PASS doAccesses(array1, array1, i % 4, 0, i) is 384
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 385
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 386
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 387
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 388
+PASS doAccesses(array1, array1, i % 4, 0, i) is 388
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 389
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 390
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 391
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 392
+PASS doAccesses(array1, array1, i % 4, 0, i) is 392
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 393
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 394
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 395
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 396
+PASS doAccesses(array1, array1, i % 4, 0, i) is 396
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 397
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 398
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 399
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 400
+PASS doAccesses(array1, array1, i % 4, 0, i) is 400
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 401
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 402
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 403
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 404
+PASS doAccesses(array1, array1, i % 4, 0, i) is 404
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 405
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 406
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 407
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 408
+PASS doAccesses(array1, array1, i % 4, 0, i) is 408
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 409
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 410
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 411
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 412
+PASS doAccesses(array1, array1, i % 4, 0, i) is 412
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 413
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 414
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 415
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 416
+PASS doAccesses(array1, array1, i % 4, 0, i) is 416
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 417
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 418
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 419
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 420
+PASS doAccesses(array1, array1, i % 4, 0, i) is 420
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 421
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 422
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 423
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 424
+PASS doAccesses(array1, array1, i % 4, 0, i) is 424
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 425
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 426
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 427
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 428
+PASS doAccesses(array1, array1, i % 4, 0, i) is 428
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 429
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 430
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 431
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 432
+PASS doAccesses(array1, array1, i % 4, 0, i) is 432
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 433
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 434
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 435
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 436
+PASS doAccesses(array1, array1, i % 4, 0, i) is 436
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 437
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 438
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 439
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 440
+PASS doAccesses(array1, array1, i % 4, 0, i) is 440
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 441
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 442
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 443
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 444
+PASS doAccesses(array1, array1, i % 4, 0, i) is 444
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 445
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 446
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 447
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 448
+PASS doAccesses(array1, array1, i % 4, 0, i) is 448
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 449
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 450
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 451
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 452
+PASS doAccesses(array1, array1, i % 4, 0, i) is 452
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 453
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 454
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 455
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 456
+PASS doAccesses(array1, array1, i % 4, 0, i) is 456
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 457
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 458
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 459
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 460
+PASS doAccesses(array1, array1, i % 4, 0, i) is 460
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 461
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 462
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 463
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 464
+PASS doAccesses(array1, array1, i % 4, 0, i) is 464
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 465
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 466
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 467
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 468
+PASS doAccesses(array1, array1, i % 4, 0, i) is 468
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 469
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 470
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 471
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 472
+PASS doAccesses(array1, array1, i % 4, 0, i) is 472
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 473
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 474
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 475
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 476
+PASS doAccesses(array1, array1, i % 4, 0, i) is 476
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 477
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 478
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 479
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 480
+PASS doAccesses(array1, array1, i % 4, 0, i) is 480
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 481
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 482
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 483
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 484
+PASS doAccesses(array1, array1, i % 4, 0, i) is 484
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 485
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 486
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 487
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 488
+PASS doAccesses(array1, array1, i % 4, 0, i) is 488
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 489
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 490
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 491
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 492
+PASS doAccesses(array1, array1, i % 4, 0, i) is 492
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 493
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 494
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 495
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 496
+PASS doAccesses(array1, array1, i % 4, 0, i) is 496
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 497
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 498
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 499
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 500
+PASS doAccesses(array1, array1, i % 4, 0, i) is 500
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 501
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 502
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 503
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 504
+PASS doAccesses(array1, array1, i % 4, 0, i) is 504
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 505
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 506
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 507
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 508
+PASS doAccesses(array1, array1, i % 4, 0, i) is 508
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 509
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 510
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 511
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 512
+PASS doAccesses(array1, array1, i % 4, 0, i) is 512
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 513
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 514
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 515
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 516
+PASS doAccesses(array1, array1, i % 4, 0, i) is 516
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 517
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 518
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 519
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 520
+PASS doAccesses(array1, array1, i % 4, 0, i) is 520
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 521
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 522
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 523
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 524
+PASS doAccesses(array1, array1, i % 4, 0, i) is 524
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 525
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 526
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 527
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 528
+PASS doAccesses(array1, array1, i % 4, 0, i) is 528
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 529
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 530
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 531
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 532
+PASS doAccesses(array1, array1, i % 4, 0, i) is 532
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 533
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 534
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 535
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 536
+PASS doAccesses(array1, array1, i % 4, 0, i) is 536
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 537
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 538
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 539
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 540
+PASS doAccesses(array1, array1, i % 4, 0, i) is 540
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 541
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 542
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 543
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 544
+PASS doAccesses(array1, array1, i % 4, 0, i) is 544
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 545
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 546
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 547
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 548
+PASS doAccesses(array1, array1, i % 4, 0, i) is 548
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 549
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 550
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 551
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 552
+PASS doAccesses(array1, array1, i % 4, 0, i) is 552
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 553
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 554
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 555
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 556
+PASS doAccesses(array1, array1, i % 4, 0, i) is 556
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 557
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 558
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 559
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 560
+PASS doAccesses(array1, array1, i % 4, 0, i) is 560
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 561
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 562
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 563
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 564
+PASS doAccesses(array1, array1, i % 4, 0, i) is 564
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 565
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 566
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 567
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 568
+PASS doAccesses(array1, array1, i % 4, 0, i) is 568
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 569
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 570
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 571
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 572
+PASS doAccesses(array1, array1, i % 4, 0, i) is 572
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 573
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 574
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 575
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 576
+PASS doAccesses(array1, array1, i % 4, 0, i) is 576
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 577
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 578
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 579
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 580
+PASS doAccesses(array1, array1, i % 4, 0, i) is 580
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 581
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 582
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 583
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 584
+PASS doAccesses(array1, array1, i % 4, 0, i) is 584
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 585
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 586
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 587
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 588
+PASS doAccesses(array1, array1, i % 4, 0, i) is 588
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 589
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 590
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 591
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 592
+PASS doAccesses(array1, array1, i % 4, 0, i) is 592
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 593
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 594
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 595
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 596
+PASS doAccesses(array1, array1, i % 4, 0, i) is 596
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 597
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 598
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 599
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 600
+PASS doAccesses(array1, array1, i % 4, 0, i) is 600
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 601
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 602
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 603
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 604
+PASS doAccesses(array1, array1, i % 4, 0, i) is 604
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 605
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 606
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 607
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 608
+PASS doAccesses(array1, array1, i % 4, 0, i) is 608
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 609
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 610
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 611
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 612
+PASS doAccesses(array1, array1, i % 4, 0, i) is 612
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 613
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 614
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 615
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 616
+PASS doAccesses(array1, array1, i % 4, 0, i) is 616
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 617
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 618
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 619
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 620
+PASS doAccesses(array1, array1, i % 4, 0, i) is 620
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 621
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 622
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 623
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 624
+PASS doAccesses(array1, array1, i % 4, 0, i) is 624
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 625
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 626
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 627
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 628
+PASS doAccesses(array1, array1, i % 4, 0, i) is 628
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 629
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 630
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 631
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 632
+PASS doAccesses(array1, array1, i % 4, 0, i) is 632
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 633
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 634
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 635
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 636
+PASS doAccesses(array1, array1, i % 4, 0, i) is 636
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 637
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 638
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 639
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 640
+PASS doAccesses(array1, array1, i % 4, 0, i) is 640
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 641
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 642
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 643
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 644
+PASS doAccesses(array1, array1, i % 4, 0, i) is 644
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 645
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 646
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 647
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 648
+PASS doAccesses(array1, array1, i % 4, 0, i) is 648
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 649
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 650
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 651
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 652
+PASS doAccesses(array1, array1, i % 4, 0, i) is 652
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 653
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 654
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 655
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 656
+PASS doAccesses(array1, array1, i % 4, 0, i) is 656
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 657
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 658
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 659
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 660
+PASS doAccesses(array1, array1, i % 4, 0, i) is 660
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 661
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 662
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 663
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 664
+PASS doAccesses(array1, array1, i % 4, 0, i) is 664
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 665
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 666
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 667
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 668
+PASS doAccesses(array1, array1, i % 4, 0, i) is 668
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 669
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 670
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 671
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 672
+PASS doAccesses(array1, array1, i % 4, 0, i) is 672
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 673
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 674
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 675
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 676
+PASS doAccesses(array1, array1, i % 4, 0, i) is 676
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 677
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 678
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 679
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 680
+PASS doAccesses(array1, array1, i % 4, 0, i) is 680
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 681
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 682
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 683
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 684
+PASS doAccesses(array1, array1, i % 4, 0, i) is 684
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 685
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 686
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 687
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 688
+PASS doAccesses(array1, array1, i % 4, 0, i) is 688
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 689
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 690
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 691
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 692
+PASS doAccesses(array1, array1, i % 4, 0, i) is 692
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 693
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 694
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 695
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 696
+PASS doAccesses(array1, array1, i % 4, 0, i) is 696
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 697
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 698
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 699
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 700
+PASS doAccesses(array1, array1, i % 4, 0, i) is 700
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 701
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 702
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 703
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 704
+PASS doAccesses(array1, array1, i % 4, 0, i) is 704
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 705
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 706
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 707
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 708
+PASS doAccesses(array1, array1, i % 4, 0, i) is 708
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 709
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 710
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 711
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 712
+PASS doAccesses(array1, array1, i % 4, 0, i) is 712
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 713
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 714
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 715
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 716
+PASS doAccesses(array1, array1, i % 4, 0, i) is 716
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 717
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 718
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 719
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 720
+PASS doAccesses(array1, array1, i % 4, 0, i) is 720
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 721
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 722
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 723
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 724
+PASS doAccesses(array1, array1, i % 4, 0, i) is 724
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 725
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 726
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 727
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 728
+PASS doAccesses(array1, array1, i % 4, 0, i) is 728
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 729
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 730
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 731
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 732
+PASS doAccesses(array1, array1, i % 4, 0, i) is 732
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 733
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 734
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 735
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 736
+PASS doAccesses(array1, array1, i % 4, 0, i) is 736
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 737
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 738
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 739
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 740
+PASS doAccesses(array1, array1, i % 4, 0, i) is 740
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 741
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 742
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 743
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 744
+PASS doAccesses(array1, array1, i % 4, 0, i) is 744
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 745
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 746
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 747
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 748
+PASS doAccesses(array1, array1, i % 4, 0, i) is 748
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 749
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 750
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 751
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 752
+PASS doAccesses(array1, array1, i % 4, 0, i) is 752
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 753
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 754
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 755
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 756
+PASS doAccesses(array1, array1, i % 4, 0, i) is 756
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 757
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 758
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 759
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 760
+PASS doAccesses(array1, array1, i % 4, 0, i) is 760
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 761
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 762
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 763
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 764
+PASS doAccesses(array1, array1, i % 4, 0, i) is 764
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 765
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 766
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 767
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 768
+PASS doAccesses(array1, array1, i % 4, 0, i) is 768
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 769
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 770
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 771
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 772
+PASS doAccesses(array1, array1, i % 4, 0, i) is 772
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 773
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 774
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 775
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 776
+PASS doAccesses(array1, array1, i % 4, 0, i) is 776
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 777
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 778
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 779
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 780
+PASS doAccesses(array1, array1, i % 4, 0, i) is 780
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 781
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 782
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 783
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 784
+PASS doAccesses(array1, array1, i % 4, 0, i) is 784
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 785
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 786
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 787
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 788
+PASS doAccesses(array1, array1, i % 4, 0, i) is 788
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 789
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 790
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 791
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 792
+PASS doAccesses(array1, array1, i % 4, 0, i) is 792
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 793
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 794
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 795
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 796
+PASS doAccesses(array1, array1, i % 4, 0, i) is 796
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 797
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 798
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 799
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 800
+PASS doAccesses(array1, array1, i % 4, 0, i) is 800
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 801
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 802
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 803
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 804
+PASS doAccesses(array1, array1, i % 4, 0, i) is 804
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 805
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 806
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 807
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 808
+PASS doAccesses(array1, array1, i % 4, 0, i) is 808
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 809
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 810
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 811
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 812
+PASS doAccesses(array1, array1, i % 4, 0, i) is 812
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 813
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 814
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 815
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 816
+PASS doAccesses(array1, array1, i % 4, 0, i) is 816
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 817
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 818
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 819
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 820
+PASS doAccesses(array1, array1, i % 4, 0, i) is 820
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 821
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 822
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 823
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 824
+PASS doAccesses(array1, array1, i % 4, 0, i) is 824
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 825
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 826
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 827
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 828
+PASS doAccesses(array1, array1, i % 4, 0, i) is 828
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 829
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 830
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 831
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 832
+PASS doAccesses(array1, array1, i % 4, 0, i) is 832
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 833
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 834
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 835
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 836
+PASS doAccesses(array1, array1, i % 4, 0, i) is 836
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 837
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 838
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 839
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 840
+PASS doAccesses(array1, array1, i % 4, 0, i) is 840
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 841
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 842
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 843
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 844
+PASS doAccesses(array1, array1, i % 4, 0, i) is 844
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 845
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 846
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 847
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 848
+PASS doAccesses(array1, array1, i % 4, 0, i) is 848
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 849
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 850
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 851
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 852
+PASS doAccesses(array1, array1, i % 4, 0, i) is 852
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 853
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 854
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 855
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 856
+PASS doAccesses(array1, array1, i % 4, 0, i) is 856
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 857
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 858
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 859
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 860
+PASS doAccesses(array1, array1, i % 4, 0, i) is 860
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 861
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 862
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 863
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 864
+PASS doAccesses(array1, array1, i % 4, 0, i) is 864
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 865
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 866
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 867
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 868
+PASS doAccesses(array1, array1, i % 4, 0, i) is 868
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 869
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 870
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 871
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 872
+PASS doAccesses(array1, array1, i % 4, 0, i) is 872
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 873
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 874
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 875
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 876
+PASS doAccesses(array1, array1, i % 4, 0, i) is 876
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 877
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 878
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 879
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 880
+PASS doAccesses(array1, array1, i % 4, 0, i) is 880
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 881
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 882
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 883
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 884
+PASS doAccesses(array1, array1, i % 4, 0, i) is 884
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 885
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 886
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 887
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 888
+PASS doAccesses(array1, array1, i % 4, 0, i) is 888
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 889
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 890
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 891
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 892
+PASS doAccesses(array1, array1, i % 4, 0, i) is 892
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 893
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 894
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 895
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 896
+PASS doAccesses(array1, array1, i % 4, 0, i) is 896
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 897
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 898
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 899
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 900
+PASS doAccesses(array1, array1, i % 4, 0, i) is 900
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 901
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 902
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 903
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 904
+PASS doAccesses(array1, array1, i % 4, 0, i) is 904
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 905
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 906
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 907
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 908
+PASS doAccesses(array1, array1, i % 4, 0, i) is 908
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 909
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 910
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 911
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 912
+PASS doAccesses(array1, array1, i % 4, 0, i) is 912
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 913
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 914
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 915
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 916
+PASS doAccesses(array1, array1, i % 4, 0, i) is 916
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 917
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 918
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 919
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 920
+PASS doAccesses(array1, array1, i % 4, 0, i) is 920
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 921
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 922
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 923
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 924
+PASS doAccesses(array1, array1, i % 4, 0, i) is 924
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 925
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 926
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 927
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 928
+PASS doAccesses(array1, array1, i % 4, 0, i) is 928
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 929
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 930
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 931
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 932
+PASS doAccesses(array1, array1, i % 4, 0, i) is 932
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 933
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 934
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 935
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 936
+PASS doAccesses(array1, array1, i % 4, 0, i) is 936
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 937
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 938
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 939
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 940
+PASS doAccesses(array1, array1, i % 4, 0, i) is 940
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 941
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 942
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 943
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 944
+PASS doAccesses(array1, array1, i % 4, 0, i) is 944
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 945
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 946
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 947
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 948
+PASS doAccesses(array1, array1, i % 4, 0, i) is 948
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 949
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 950
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 951
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 952
+PASS doAccesses(array1, array1, i % 4, 0, i) is 952
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 953
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 954
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 955
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 956
+PASS doAccesses(array1, array1, i % 4, 0, i) is 956
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 957
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 958
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 959
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 960
+PASS doAccesses(array1, array1, i % 4, 0, i) is 960
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 961
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 962
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 963
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 964
+PASS doAccesses(array1, array1, i % 4, 0, i) is 964
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 965
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 966
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 967
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 968
+PASS doAccesses(array1, array1, i % 4, 0, i) is 968
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 969
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 970
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 971
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 972
+PASS doAccesses(array1, array1, i % 4, 0, i) is 972
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 973
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 974
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 975
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 976
+PASS doAccesses(array1, array1, i % 4, 0, i) is 976
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 977
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 978
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 979
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 980
+PASS doAccesses(array1, array1, i % 4, 0, i) is 980
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 981
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 982
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 983
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 984
+PASS doAccesses(array1, array1, i % 4, 0, i) is 984
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 985
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 986
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 987
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 988
+PASS doAccesses(array1, array1, i % 4, 0, i) is 988
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 989
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 990
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 991
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 992
+PASS doAccesses(array1, array1, i % 4, 0, i) is 992
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 993
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 994
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 995
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 1
+PASS array2[1] is 996
+PASS doAccesses(array1, array1, i % 4, 0, i) is 996
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 2
+PASS array2[2] is 997
+PASS doAccesses(array1, array1, i % 4, 0, i) is 2
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 3
+PASS array2[3] is 998
+PASS doAccesses(array1, array1, i % 4, 0, i) is 3
+PASS doAccesses(array1, array2, i % 4, (i + 1) % 4, i) is 4
+PASS array2[0] is 999
+PASS doAccesses(array1, array1, i % 4, 0, i) is 4
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-get-by-val-clobber.js b/test/webkit/dfg-get-by-val-clobber.js
new file mode 100644 (file)
index 0000000..c6c57fe
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that common subexpression elimination knows how to accurately model PutBuVal."
+);
+
+function doAccesses(a, b, i, j, y) {
+    var x = a[i];
+    b[j] = y;
+    return a[i];
+}
+
+var array1 = [1, 2, 3, 4];
+var array2 = [5, 6, 7, 8];
+
+for (var i = 0; i < 1000; ++i) {
+    // Simple test, pretty easy to pass.
+    shouldBe("doAccesses(array1, array2, i % 4, (i + 1) % 4, i)", "" + ((i % 4) + 1));
+    shouldBe("array2[" + ((i + 1) % 4) + "]", "" + i);
+
+    // Undo.
+    array2[((i + 1) % 4)] = (i % 4) + 5;
+
+    // Now the evil test. This is constructed to minimize the likelihood that CSE will succeed through
+    // cleverness alone.
+    shouldBe("doAccesses(array1, array1, i % 4, 0, i)", "" + ((i % 4) == 0 ? i : (i % 4) + 1));
+
+    // Undo.
+    array1[0] = 1;
+}
+
diff --git a/test/webkit/dfg-getter-expected.txt b/test/webkit/dfg-getter-expected.txt
new file mode 100644 (file)
index 0000000..41fa3ad
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that DFG getter caching does not break the world.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o) is 0
+PASS foo(o) is 1
+PASS foo(o) is 2
+PASS foo(o) is 3
+PASS foo(o) is 4
+PASS foo(o) is 5
+PASS foo(o) is 6
+PASS foo(o) is 7
+PASS foo(o) is 8
+PASS foo(o) is 9
+PASS foo(o) is 10
+PASS foo(o) is 11
+PASS foo(o) is 12
+PASS foo(o) is 13
+PASS foo(o) is 14
+PASS foo(o) is 15
+PASS foo(o) is 16
+PASS foo(o) is 17
+PASS foo(o) is 18
+PASS foo(o) is 19
+PASS foo(o) is 20
+PASS foo(o) is 21
+PASS foo(o) is 22
+PASS foo(o) is 23
+PASS foo(o) is 24
+PASS foo(o) is 25
+PASS foo(o) is 26
+PASS foo(o) is 27
+PASS foo(o) is 28
+PASS foo(o) is 29
+PASS foo(o) is 30
+PASS foo(o) is 31
+PASS foo(o) is 32
+PASS foo(o) is 33
+PASS foo(o) is 34
+PASS foo(o) is 35
+PASS foo(o) is 36
+PASS foo(o) is 37
+PASS foo(o) is 38
+PASS foo(o) is 39
+PASS foo(o) is 40
+PASS foo(o) is 41
+PASS foo(o) is 42
+PASS foo(o) is 43
+PASS foo(o) is 44
+PASS foo(o) is 45
+PASS foo(o) is 46
+PASS foo(o) is 47
+PASS foo(o) is 48
+PASS foo(o) is 49
+PASS foo(o) is 50
+PASS foo(o) is 51
+PASS foo(o) is 52
+PASS foo(o) is 53
+PASS foo(o) is 54
+PASS foo(o) is 55
+PASS foo(o) is 56
+PASS foo(o) is 57
+PASS foo(o) is 58
+PASS foo(o) is 59
+PASS foo(o) is 60
+PASS foo(o) is 61
+PASS foo(o) is 62
+PASS foo(o) is 63
+PASS foo(o) is 64
+PASS foo(o) is 65
+PASS foo(o) is 66
+PASS foo(o) is 67
+PASS foo(o) is 68
+PASS foo(o) is 69
+PASS foo(o) is 70
+PASS foo(o) is 71
+PASS foo(o) is 72
+PASS foo(o) is 73
+PASS foo(o) is 74
+PASS foo(o) is 75
+PASS foo(o) is 76
+PASS foo(o) is 77
+PASS foo(o) is 78
+PASS foo(o) is 79
+PASS foo(o) is 80
+PASS foo(o) is 81
+PASS foo(o) is 82
+PASS foo(o) is 83
+PASS foo(o) is 84
+PASS foo(o) is 85
+PASS foo(o) is 86
+PASS foo(o) is 87
+PASS foo(o) is 88
+PASS foo(o) is 89
+PASS foo(o) is 90
+PASS foo(o) is 91
+PASS foo(o) is 92
+PASS foo(o) is 93
+PASS foo(o) is 94
+PASS foo(o) is 95
+PASS foo(o) is 96
+PASS foo(o) is 97
+PASS foo(o) is 98
+PASS foo(o) is 99
+PASS foo(o) is 100
+PASS foo(o) is 101
+PASS foo(o) is 102
+PASS foo(o) is 103
+PASS foo(o) is 104
+PASS foo(o) is 105
+PASS foo(o) is 106
+PASS foo(o) is 107
+PASS foo(o) is 108
+PASS foo(o) is 109
+PASS foo(o) is 110
+PASS foo(o) is 111
+PASS foo(o) is 112
+PASS foo(o) is 113
+PASS foo(o) is 114
+PASS foo(o) is 115
+PASS foo(o) is 116
+PASS foo(o) is 117
+PASS foo(o) is 118
+PASS foo(o) is 119
+PASS foo(o) is 120
+PASS foo(o) is 121
+PASS foo(o) is 122
+PASS foo(o) is 123
+PASS foo(o) is 124
+PASS foo(o) is 125
+PASS foo(o) is 126
+PASS foo(o) is 127
+PASS foo(o) is 128
+PASS foo(o) is 129
+PASS foo(o) is 130
+PASS foo(o) is 131
+PASS foo(o) is 132
+PASS foo(o) is 133
+PASS foo(o) is 134
+PASS foo(o) is 135
+PASS foo(o) is 136
+PASS foo(o) is 137
+PASS foo(o) is 138
+PASS foo(o) is 139
+PASS foo(o) is 140
+PASS foo(o) is 141
+PASS foo(o) is 142
+PASS foo(o) is 143
+PASS foo(o) is 144
+PASS foo(o) is 145
+PASS foo(o) is 146
+PASS foo(o) is 147
+PASS foo(o) is 148
+PASS foo(o) is 149
+PASS foo(o) is 150
+PASS foo(o) is 151
+PASS foo(o) is 152
+PASS foo(o) is 153
+PASS foo(o) is 154
+PASS foo(o) is 155
+PASS foo(o) is 156
+PASS foo(o) is 157
+PASS foo(o) is 158
+PASS foo(o) is 159
+PASS foo(o) is 160
+PASS foo(o) is 161
+PASS foo(o) is 162
+PASS foo(o) is 163
+PASS foo(o) is 164
+PASS foo(o) is 165
+PASS foo(o) is 166
+PASS foo(o) is 167
+PASS foo(o) is 168
+PASS foo(o) is 169
+PASS foo(o) is 170
+PASS foo(o) is 171
+PASS foo(o) is 172
+PASS foo(o) is 173
+PASS foo(o) is 174
+PASS foo(o) is 175
+PASS foo(o) is 176
+PASS foo(o) is 177
+PASS foo(o) is 178
+PASS foo(o) is 179
+PASS foo(o) is 180
+PASS foo(o) is 181
+PASS foo(o) is 182
+PASS foo(o) is 183
+PASS foo(o) is 184
+PASS foo(o) is 185
+PASS foo(o) is 186
+PASS foo(o) is 187
+PASS foo(o) is 188
+PASS foo(o) is 189
+PASS foo(o) is 190
+PASS foo(o) is 191
+PASS foo(o) is 192
+PASS foo(o) is 193
+PASS foo(o) is 194
+PASS foo(o) is 195
+PASS foo(o) is 196
+PASS foo(o) is 197
+PASS foo(o) is 198
+PASS foo(o) is 199
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-getter-throw-expected.txt b/test/webkit/dfg-getter-throw-expected.txt
new file mode 100644 (file)
index 0000000..d56ea1f
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that DFG getter caching does not break the world if the getter throws an exception.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(o) is "Returned result: 0"
+PASS bar(o) is "Returned result: 1"
+PASS bar(o) is "Returned result: 2"
+PASS bar(o) is "Returned result: 3"
+PASS bar(o) is "Returned result: 4"
+PASS bar(o) is "Returned result: 5"
+PASS bar(o) is "Returned result: 6"
+PASS bar(o) is "Returned result: 7"
+PASS bar(o) is "Returned result: 8"
+PASS bar(o) is "Returned result: 9"
+PASS bar(o) is "Returned result: 10"
+PASS bar(o) is "Returned result: 11"
+PASS bar(o) is "Returned result: 12"
+PASS bar(o) is "Returned result: 13"
+PASS bar(o) is "Returned result: 14"
+PASS bar(o) is "Returned result: 15"
+PASS bar(o) is "Returned result: 16"
+PASS bar(o) is "Returned result: 17"
+PASS bar(o) is "Returned result: 18"
+PASS bar(o) is "Returned result: 19"
+PASS bar(o) is "Returned result: 20"
+PASS bar(o) is "Returned result: 21"
+PASS bar(o) is "Returned result: 22"
+PASS bar(o) is "Returned result: 23"
+PASS bar(o) is "Returned result: 24"
+PASS bar(o) is "Returned result: 25"
+PASS bar(o) is "Returned result: 26"
+PASS bar(o) is "Returned result: 27"
+PASS bar(o) is "Returned result: 28"
+PASS bar(o) is "Returned result: 29"
+PASS bar(o) is "Returned result: 30"
+PASS bar(o) is "Returned result: 31"
+PASS bar(o) is "Returned result: 32"
+PASS bar(o) is "Returned result: 33"
+PASS bar(o) is "Returned result: 34"
+PASS bar(o) is "Returned result: 35"
+PASS bar(o) is "Returned result: 36"
+PASS bar(o) is "Returned result: 37"
+PASS bar(o) is "Returned result: 38"
+PASS bar(o) is "Returned result: 39"
+PASS bar(o) is "Returned result: 40"
+PASS bar(o) is "Returned result: 41"
+PASS bar(o) is "Returned result: 42"
+PASS bar(o) is "Returned result: 43"
+PASS bar(o) is "Returned result: 44"
+PASS bar(o) is "Returned result: 45"
+PASS bar(o) is "Returned result: 46"
+PASS bar(o) is "Returned result: 47"
+PASS bar(o) is "Returned result: 48"
+PASS bar(o) is "Returned result: 49"
+PASS bar(o) is "Returned result: 50"
+PASS bar(o) is "Returned result: 51"
+PASS bar(o) is "Returned result: 52"
+PASS bar(o) is "Returned result: 53"
+PASS bar(o) is "Returned result: 54"
+PASS bar(o) is "Returned result: 55"
+PASS bar(o) is "Returned result: 56"
+PASS bar(o) is "Returned result: 57"
+PASS bar(o) is "Returned result: 58"
+PASS bar(o) is "Returned result: 59"
+PASS bar(o) is "Returned result: 60"
+PASS bar(o) is "Returned result: 61"
+PASS bar(o) is "Returned result: 62"
+PASS bar(o) is "Returned result: 63"
+PASS bar(o) is "Returned result: 64"
+PASS bar(o) is "Returned result: 65"
+PASS bar(o) is "Returned result: 66"
+PASS bar(o) is "Returned result: 67"
+PASS bar(o) is "Returned result: 68"
+PASS bar(o) is "Returned result: 69"
+PASS bar(o) is "Returned result: 70"
+PASS bar(o) is "Returned result: 71"
+PASS bar(o) is "Returned result: 72"
+PASS bar(o) is "Returned result: 73"
+PASS bar(o) is "Returned result: 74"
+PASS bar(o) is "Returned result: 75"
+PASS bar(o) is "Returned result: 76"
+PASS bar(o) is "Returned result: 77"
+PASS bar(o) is "Returned result: 78"
+PASS bar(o) is "Returned result: 79"
+PASS bar(o) is "Returned result: 80"
+PASS bar(o) is "Returned result: 81"
+PASS bar(o) is "Returned result: 82"
+PASS bar(o) is "Returned result: 83"
+PASS bar(o) is "Returned result: 84"
+PASS bar(o) is "Returned result: 85"
+PASS bar(o) is "Returned result: 86"
+PASS bar(o) is "Returned result: 87"
+PASS bar(o) is "Returned result: 88"
+PASS bar(o) is "Returned result: 89"
+PASS bar(o) is "Returned result: 90"
+PASS bar(o) is "Returned result: 91"
+PASS bar(o) is "Returned result: 92"
+PASS bar(o) is "Returned result: 93"
+PASS bar(o) is "Returned result: 94"
+PASS bar(o) is "Returned result: 95"
+PASS bar(o) is "Returned result: 96"
+PASS bar(o) is "Returned result: 97"
+PASS bar(o) is "Returned result: 98"
+PASS bar(o) is "Returned result: 99"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS bar(o) is "Threw exception: Oh hi, I'm an exception!"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-getter-throw.js b/test/webkit/dfg-getter-throw.js
new file mode 100644 (file)
index 0000000..c77b33d
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that DFG getter caching does not break the world if the getter throws an exception."
+);
+
+function foo(o) {
+    return o.f;
+}
+
+function bar(o) {
+    try {
+        return "Returned result: " + foo(o);
+    } catch (e) {
+        return "Threw exception: " + e;
+    }
+}
+
+for (var i = 0; i < 200; ++i) {
+    var o = new Object();
+    o.__defineGetter__("f", function(){
+        if (i < 100)
+            return i;
+        else
+            throw "Oh hi, I'm an exception!";
+    });
+    shouldBe("bar(o)", i < 100 ? "\"Returned result: " + i + "\"" : "\"Threw exception: Oh hi, I'm an exception!\"");
+}
+
+
diff --git a/test/webkit/dfg-getter.js b/test/webkit/dfg-getter.js
new file mode 100644 (file)
index 0000000..dafd9f9
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that DFG getter caching does not break the world."
+);
+
+function foo(o) {
+    return o.f;
+}
+
+for (var i = 0; i < 200; ++i) {
+    var o = new Object();
+    o.__defineGetter__("f", function(){ return i; });
+    shouldBe("foo(o)", "" + i);
+}
+
+
diff --git a/test/webkit/dfg-holy-put-by-val-interferes-with-get-array-length-expected.txt b/test/webkit/dfg-holy-put-by-val-interferes-with-get-array-length-expected.txt
new file mode 100644 (file)
index 0000000..265b72d
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG's interference analysis knows that a holy PutByVal interferes with a GetArrayLength.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS foo([75]) is [1,2]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-holy-put-by-val-interferes-with-get-array-length.js b/test/webkit/dfg-holy-put-by-val-interferes-with-get-array-length.js
new file mode 100644 (file)
index 0000000..684ebe8
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG's interference analysis knows that a holy PutByVal interferes with a GetArrayLength."
+);
+
+function foo(array) {
+    var x = array.length;
+    array[1] = 42;
+    return [x, array.length];
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo([75])", "[1,2]");
+
+
diff --git a/test/webkit/dfg-inline-arguments-become-double-expected.txt b/test/webkit/dfg-inline-arguments-become-double-expected.txt
new file mode 100644 (file)
index 0000000..b11b6ae
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves function.arguments functionality if the arguments are reassigned to refer to an int32.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a0, 42.5, c0"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a1, 42.5, c1"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a2, 42.5, c2"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a3, 42.5, c3"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a4, 42.5, c4"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a5, 42.5, c5"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a6, 42.5, c6"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a7, 42.5, c7"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a8, 42.5, c8"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a9, 42.5, c9"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a10, 42.5, c10"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a11, 42.5, c11"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a12, 42.5, c12"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a13, 42.5, c13"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a14, 42.5, c14"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a15, 42.5, c15"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a16, 42.5, c16"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a17, 42.5, c17"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a18, 42.5, c18"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a19, 42.5, c19"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a20, 42.5, c20"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a21, 42.5, c21"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a22, 42.5, c22"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a23, 42.5, c23"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a24, 42.5, c24"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a25, 42.5, c25"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a26, 42.5, c26"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a27, 42.5, c27"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a28, 42.5, c28"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a29, 42.5, c29"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a30, 42.5, c30"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a31, 42.5, c31"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a32, 42.5, c32"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a33, 42.5, c33"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a34, 42.5, c34"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a35, 42.5, c35"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a36, 42.5, c36"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a37, 42.5, c37"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a38, 42.5, c38"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a39, 42.5, c39"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a40, 42.5, c40"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a41, 42.5, c41"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a42, 42.5, c42"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a43, 42.5, c43"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a44, 42.5, c44"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a45, 42.5, c45"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a46, 42.5, c46"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a47, 42.5, c47"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a48, 42.5, c48"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a49, 42.5, c49"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a50, 42.5, c50"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a51, 42.5, c51"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a52, 42.5, c52"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a53, 42.5, c53"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a54, 42.5, c54"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a55, 42.5, c55"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a56, 42.5, c56"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a57, 42.5, c57"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a58, 42.5, c58"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a59, 42.5, c59"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a60, 42.5, c60"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a61, 42.5, c61"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a62, 42.5, c62"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a63, 42.5, c63"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a64, 42.5, c64"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a65, 42.5, c65"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a66, 42.5, c66"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a67, 42.5, c67"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a68, 42.5, c68"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a69, 42.5, c69"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a70, 42.5, c70"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a71, 42.5, c71"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a72, 42.5, c72"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a73, 42.5, c73"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a74, 42.5, c74"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a75, 42.5, c75"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a76, 42.5, c76"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a77, 42.5, c77"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a78, 42.5, c78"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a79, 42.5, c79"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a80, 42.5, c80"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a81, 42.5, c81"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a82, 42.5, c82"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a83, 42.5, c83"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a84, 42.5, c84"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a85, 42.5, c85"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a86, 42.5, c86"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a87, 42.5, c87"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a88, 42.5, c88"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a89, 42.5, c89"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a90, 42.5, c90"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a91, 42.5, c91"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a92, 42.5, c92"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a93, 42.5, c93"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a94, 42.5, c94"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a95, 42.5, c95"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a96, 42.5, c96"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a97, 42.5, c97"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a98, 42.5, c98"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a99, 42.5, c99"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a100, 42.5, c100"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a101, 42.5, c101"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a102, 42.5, c102"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a103, 42.5, c103"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a104, 42.5, c104"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a105, 42.5, c105"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a106, 42.5, c106"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a107, 42.5, c107"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a108, 42.5, c108"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a109, 42.5, c109"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a110, 42.5, c110"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a111, 42.5, c111"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a112, 42.5, c112"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a113, 42.5, c113"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a114, 42.5, c114"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a115, 42.5, c115"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a116, 42.5, c116"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a117, 42.5, c117"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a118, 42.5, c118"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a119, 42.5, c119"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a120, 42.5, c120"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a121, 42.5, c121"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a122, 42.5, c122"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a123, 42.5, c123"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a124, 42.5, c124"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a125, 42.5, c125"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a126, 42.5, c126"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a127, 42.5, c127"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a128, 42.5, c128"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a129, 42.5, c129"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a130, 42.5, c130"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a131, 42.5, c131"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a132, 42.5, c132"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a133, 42.5, c133"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a134, 42.5, c134"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a135, 42.5, c135"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a136, 42.5, c136"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a137, 42.5, c137"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a138, 42.5, c138"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a139, 42.5, c139"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a140, 42.5, c140"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a141, 42.5, c141"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a142, 42.5, c142"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a143, 42.5, c143"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a144, 42.5, c144"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a145, 42.5, c145"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a146, 42.5, c146"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a147, 42.5, c147"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a148, 42.5, c148"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a149, 42.5, c149"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a150, 42.5, c150"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a151, 42.5, c151"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a152, 42.5, c152"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a153, 42.5, c153"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a154, 42.5, c154"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a155, 42.5, c155"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a156, 42.5, c156"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a157, 42.5, c157"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a158, 42.5, c158"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a159, 42.5, c159"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a160, 42.5, c160"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a161, 42.5, c161"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a162, 42.5, c162"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a163, 42.5, c163"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a164, 42.5, c164"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a165, 42.5, c165"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a166, 42.5, c166"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a167, 42.5, c167"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a168, 42.5, c168"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a169, 42.5, c169"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a170, 42.5, c170"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a171, 42.5, c171"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a172, 42.5, c172"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a173, 42.5, c173"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a174, 42.5, c174"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a175, 42.5, c175"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a176, 42.5, c176"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a177, 42.5, c177"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a178, 42.5, c178"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a179, 42.5, c179"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a180, 42.5, c180"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a181, 42.5, c181"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a182, 42.5, c182"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a183, 42.5, c183"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a184, 42.5, c184"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a185, 42.5, c185"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a186, 42.5, c186"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a187, 42.5, c187"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a188, 42.5, c188"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a189, 42.5, c189"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a190, 42.5, c190"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a191, 42.5, c191"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a192, 42.5, c192"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a193, 42.5, c193"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a194, 42.5, c194"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a195, 42.5, c195"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a196, 42.5, c196"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a197, 42.5, c197"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a198, 42.5, c198"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a199, 42.5, c199"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-arguments-become-double.js b/test/webkit/dfg-inline-arguments-become-double.js
new file mode 100644 (file)
index 0000000..b7db7ec
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves function.arguments functionality if the arguments are reassigned to refer to an int32."
+);
+
+function foo() {
+    return bar.arguments;
+}
+
+function bar(a,b,c) {
+    b = 42.5;
+    return foo(a,b,c);
+}
+
+function baz(a,b,c) {
+    return bar(a,b,c);
+}
+
+function argsToStr(args) {
+    var str = args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += args[i];
+    }
+    return str;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("argsToStr(baz(\"a\" + __i, \"b\" + __i, \"c\" + __i))", "\"[object Arguments]: a" + __i + ", 42.5, c" + __i + "\"");
+
+var successfullyParsed = true;
diff --git a/test/webkit/dfg-inline-arguments-become-int32-expected.txt b/test/webkit/dfg-inline-arguments-become-int32-expected.txt
new file mode 100644 (file)
index 0000000..e4a4ab0
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves function.arguments functionality if the arguments are reassigned to refer to an int32.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a0, 42, c0"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a1, 42, c1"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a2, 42, c2"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a3, 42, c3"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a4, 42, c4"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a5, 42, c5"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a6, 42, c6"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a7, 42, c7"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a8, 42, c8"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a9, 42, c9"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a10, 42, c10"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a11, 42, c11"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a12, 42, c12"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a13, 42, c13"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a14, 42, c14"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a15, 42, c15"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a16, 42, c16"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a17, 42, c17"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a18, 42, c18"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a19, 42, c19"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a20, 42, c20"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a21, 42, c21"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a22, 42, c22"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a23, 42, c23"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a24, 42, c24"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a25, 42, c25"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a26, 42, c26"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a27, 42, c27"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a28, 42, c28"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a29, 42, c29"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a30, 42, c30"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a31, 42, c31"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a32, 42, c32"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a33, 42, c33"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a34, 42, c34"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a35, 42, c35"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a36, 42, c36"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a37, 42, c37"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a38, 42, c38"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a39, 42, c39"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a40, 42, c40"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a41, 42, c41"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a42, 42, c42"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a43, 42, c43"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a44, 42, c44"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a45, 42, c45"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a46, 42, c46"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a47, 42, c47"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a48, 42, c48"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a49, 42, c49"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a50, 42, c50"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a51, 42, c51"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a52, 42, c52"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a53, 42, c53"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a54, 42, c54"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a55, 42, c55"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a56, 42, c56"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a57, 42, c57"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a58, 42, c58"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a59, 42, c59"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a60, 42, c60"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a61, 42, c61"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a62, 42, c62"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a63, 42, c63"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a64, 42, c64"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a65, 42, c65"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a66, 42, c66"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a67, 42, c67"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a68, 42, c68"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a69, 42, c69"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a70, 42, c70"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a71, 42, c71"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a72, 42, c72"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a73, 42, c73"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a74, 42, c74"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a75, 42, c75"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a76, 42, c76"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a77, 42, c77"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a78, 42, c78"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a79, 42, c79"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a80, 42, c80"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a81, 42, c81"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a82, 42, c82"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a83, 42, c83"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a84, 42, c84"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a85, 42, c85"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a86, 42, c86"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a87, 42, c87"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a88, 42, c88"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a89, 42, c89"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a90, 42, c90"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a91, 42, c91"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a92, 42, c92"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a93, 42, c93"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a94, 42, c94"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a95, 42, c95"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a96, 42, c96"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a97, 42, c97"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a98, 42, c98"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a99, 42, c99"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a100, 42, c100"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a101, 42, c101"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a102, 42, c102"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a103, 42, c103"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a104, 42, c104"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a105, 42, c105"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a106, 42, c106"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a107, 42, c107"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a108, 42, c108"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a109, 42, c109"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a110, 42, c110"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a111, 42, c111"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a112, 42, c112"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a113, 42, c113"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a114, 42, c114"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a115, 42, c115"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a116, 42, c116"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a117, 42, c117"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a118, 42, c118"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a119, 42, c119"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a120, 42, c120"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a121, 42, c121"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a122, 42, c122"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a123, 42, c123"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a124, 42, c124"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a125, 42, c125"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a126, 42, c126"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a127, 42, c127"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a128, 42, c128"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a129, 42, c129"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a130, 42, c130"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a131, 42, c131"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a132, 42, c132"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a133, 42, c133"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a134, 42, c134"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a135, 42, c135"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a136, 42, c136"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a137, 42, c137"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a138, 42, c138"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a139, 42, c139"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a140, 42, c140"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a141, 42, c141"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a142, 42, c142"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a143, 42, c143"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a144, 42, c144"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a145, 42, c145"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a146, 42, c146"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a147, 42, c147"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a148, 42, c148"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a149, 42, c149"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a150, 42, c150"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a151, 42, c151"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a152, 42, c152"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a153, 42, c153"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a154, 42, c154"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a155, 42, c155"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a156, 42, c156"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a157, 42, c157"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a158, 42, c158"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a159, 42, c159"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a160, 42, c160"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a161, 42, c161"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a162, 42, c162"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a163, 42, c163"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a164, 42, c164"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a165, 42, c165"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a166, 42, c166"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a167, 42, c167"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a168, 42, c168"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a169, 42, c169"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a170, 42, c170"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a171, 42, c171"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a172, 42, c172"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a173, 42, c173"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a174, 42, c174"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a175, 42, c175"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a176, 42, c176"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a177, 42, c177"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a178, 42, c178"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a179, 42, c179"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a180, 42, c180"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a181, 42, c181"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a182, 42, c182"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a183, 42, c183"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a184, 42, c184"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a185, 42, c185"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a186, 42, c186"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a187, 42, c187"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a188, 42, c188"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a189, 42, c189"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a190, 42, c190"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a191, 42, c191"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a192, 42, c192"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a193, 42, c193"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a194, 42, c194"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a195, 42, c195"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a196, 42, c196"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a197, 42, c197"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a198, 42, c198"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a199, 42, c199"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-arguments-become-int32.js b/test/webkit/dfg-inline-arguments-become-int32.js
new file mode 100644 (file)
index 0000000..f4fb576
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves function.arguments functionality if the arguments are reassigned to refer to an int32."
+);
+
+function foo() {
+    return bar.arguments;
+}
+
+function bar(a,b,c) {
+    b = 42;
+    return foo(a,b,c);
+}
+
+function baz(a,b,c) {
+    return bar(a,b,c);
+}
+
+function argsToStr(args) {
+    var str = args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += args[i];
+    }
+    return str;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("argsToStr(baz(\"a\" + __i, \"b\" + __i, \"c\" + __i))", "\"[object Arguments]: a" + __i + ", 42, c" + __i + "\"");
+
+var successfullyParsed = true;
diff --git a/test/webkit/dfg-inline-arguments-int32-expected.txt b/test/webkit/dfg-inline-arguments-int32-expected.txt
new file mode 100644 (file)
index 0000000..421e027
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves function.arguments functionality if the arguments were represented as unboxed int32.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 1, 2, 3"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 2, 3, 4"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 3, 4, 5"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 4, 5, 6"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 5, 6, 7"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 6, 7, 8"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 7, 8, 9"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 8, 9, 10"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 9, 10, 11"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 10, 11, 12"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 11, 12, 13"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 12, 13, 14"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 13, 14, 15"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 14, 15, 16"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 15, 16, 17"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 16, 17, 18"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 17, 18, 19"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 18, 19, 20"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 19, 20, 21"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 20, 21, 22"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 21, 22, 23"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 22, 23, 24"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 23, 24, 25"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 24, 25, 26"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 25, 26, 27"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 26, 27, 28"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 27, 28, 29"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 28, 29, 30"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 29, 30, 31"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 30, 31, 32"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 31, 32, 33"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 32, 33, 34"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 33, 34, 35"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 34, 35, 36"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 35, 36, 37"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 36, 37, 38"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 37, 38, 39"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 38, 39, 40"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 39, 40, 41"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 40, 41, 42"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 41, 42, 43"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 42, 43, 44"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 43, 44, 45"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 44, 45, 46"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 45, 46, 47"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 46, 47, 48"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 47, 48, 49"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 48, 49, 50"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 49, 50, 51"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 50, 51, 52"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 51, 52, 53"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 52, 53, 54"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 53, 54, 55"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 54, 55, 56"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 55, 56, 57"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 56, 57, 58"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 57, 58, 59"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 58, 59, 60"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 59, 60, 61"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 60, 61, 62"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 61, 62, 63"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 62, 63, 64"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 63, 64, 65"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 64, 65, 66"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 65, 66, 67"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 66, 67, 68"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 67, 68, 69"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 68, 69, 70"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 69, 70, 71"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 70, 71, 72"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 71, 72, 73"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 72, 73, 74"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 73, 74, 75"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 74, 75, 76"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 75, 76, 77"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 76, 77, 78"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 77, 78, 79"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 78, 79, 80"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 79, 80, 81"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 80, 81, 82"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 81, 82, 83"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 82, 83, 84"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 83, 84, 85"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 84, 85, 86"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 85, 86, 87"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 86, 87, 88"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 87, 88, 89"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 88, 89, 90"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 89, 90, 91"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 90, 91, 92"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 91, 92, 93"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 92, 93, 94"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 93, 94, 95"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 94, 95, 96"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 95, 96, 97"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 96, 97, 98"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 97, 98, 99"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 98, 99, 100"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 99, 100, 101"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 100, 101, 102"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 101, 102, 103"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 102, 103, 104"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 103, 104, 105"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 104, 105, 106"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 105, 106, 107"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 106, 107, 108"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 107, 108, 109"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 108, 109, 110"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 109, 110, 111"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 110, 111, 112"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 111, 112, 113"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 112, 113, 114"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 113, 114, 115"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 114, 115, 116"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 115, 116, 117"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 116, 117, 118"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 117, 118, 119"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 118, 119, 120"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 119, 120, 121"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 120, 121, 122"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 121, 122, 123"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 122, 123, 124"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 123, 124, 125"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 124, 125, 126"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 125, 126, 127"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 126, 127, 128"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 127, 128, 129"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 128, 129, 130"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 129, 130, 131"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 130, 131, 132"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 131, 132, 133"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 132, 133, 134"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 133, 134, 135"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 134, 135, 136"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 135, 136, 137"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 136, 137, 138"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 137, 138, 139"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 138, 139, 140"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 139, 140, 141"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 140, 141, 142"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 141, 142, 143"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 142, 143, 144"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 143, 144, 145"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 144, 145, 146"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 145, 146, 147"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 146, 147, 148"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 147, 148, 149"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 148, 149, 150"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 149, 150, 151"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 150, 151, 152"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 151, 152, 153"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 152, 153, 154"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 153, 154, 155"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 154, 155, 156"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 155, 156, 157"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 156, 157, 158"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 157, 158, 159"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 158, 159, 160"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 159, 160, 161"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 160, 161, 162"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 161, 162, 163"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 162, 163, 164"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 163, 164, 165"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 164, 165, 166"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 165, 166, 167"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 166, 167, 168"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 167, 168, 169"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 168, 169, 170"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 169, 170, 171"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 170, 171, 172"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 171, 172, 173"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 172, 173, 174"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 173, 174, 175"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 174, 175, 176"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 175, 176, 177"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 176, 177, 178"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 177, 178, 179"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 178, 179, 180"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 179, 180, 181"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 180, 181, 182"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 181, 182, 183"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 182, 183, 184"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 183, 184, 185"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 184, 185, 186"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 185, 186, 187"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 186, 187, 188"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 187, 188, 189"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 188, 189, 190"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 189, 190, 191"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 190, 191, 192"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 191, 192, 193"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 192, 193, 194"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 193, 194, 195"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 194, 195, 196"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 195, 196, 197"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 196, 197, 198"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 197, 198, 199"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 198, 199, 200"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 199, 200, 201"
+PASS argsToStr(baz(__i + 1, __i + 2, __i + 3)) is "[object Arguments]: 200, 201, 202"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-arguments-int32.js b/test/webkit/dfg-inline-arguments-int32.js
new file mode 100644 (file)
index 0000000..8d95c6f
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves function.arguments functionality if the arguments were represented as unboxed int32."
+);
+
+function foo() {
+    return bar.arguments;
+}
+
+function bar(a,b,c) {
+    return foo(a,b,c);
+}
+
+function baz(a,b,c) {
+    return bar(a,b,c);
+}
+
+function argsToStr(args) {
+    var str = args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += args[i];
+    }
+    return str;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("argsToStr(baz(__i + 1, __i + 2, __i + 3))", "\"[object Arguments]: " + (__i + 1) + ", " + (__i + 2) + ", " + (__i + 3) + "\"");
+
+var successfullyParsed = true;
diff --git a/test/webkit/dfg-inline-arguments-osr-exit-and-capture-expected.txt b/test/webkit/dfg-inline-arguments-osr-exit-and-capture-expected.txt
new file mode 100644 (file)
index 0000000..10f7dd0
--- /dev/null
@@ -0,0 +1,332 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens if you OSR exit within inlined code that has interesting control flow with arguments that are specially formatted and you capture the arguments reflectively after the OSR exit.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS baz(arg1, arg2) is 43
+PASS baz(arg1, arg2) is 45
+PASS baz(arg1, arg2) is 47
+PASS baz(arg1, arg2) is 49
+PASS baz(arg1, arg2) is 51
+PASS baz(arg1, arg2) is 53
+PASS baz(arg1, arg2) is 55
+PASS baz(arg1, arg2) is 57
+PASS baz(arg1, arg2) is 59
+PASS baz(arg1, arg2) is 61
+PASS baz(arg1, arg2) is 63
+PASS baz(arg1, arg2) is 65
+PASS baz(arg1, arg2) is 67
+PASS baz(arg1, arg2) is 69
+PASS baz(arg1, arg2) is 71
+PASS baz(arg1, arg2) is 73
+PASS baz(arg1, arg2) is 75
+PASS baz(arg1, arg2) is 77
+PASS baz(arg1, arg2) is 79
+PASS baz(arg1, arg2) is 81
+PASS baz(arg1, arg2) is 83
+PASS baz(arg1, arg2) is 85
+PASS baz(arg1, arg2) is 87
+PASS baz(arg1, arg2) is 89
+PASS baz(arg1, arg2) is 91
+PASS baz(arg1, arg2) is 93
+PASS baz(arg1, arg2) is 95
+PASS baz(arg1, arg2) is 97
+PASS baz(arg1, arg2) is 99
+PASS baz(arg1, arg2) is 101
+PASS baz(arg1, arg2) is 103
+PASS baz(arg1, arg2) is 105
+PASS baz(arg1, arg2) is 107
+PASS baz(arg1, arg2) is 109
+PASS baz(arg1, arg2) is 111
+PASS baz(arg1, arg2) is 113
+PASS baz(arg1, arg2) is 115
+PASS baz(arg1, arg2) is 117
+PASS baz(arg1, arg2) is 119
+PASS baz(arg1, arg2) is 121
+PASS baz(arg1, arg2) is 123
+PASS baz(arg1, arg2) is 125
+PASS baz(arg1, arg2) is 127
+PASS baz(arg1, arg2) is 129
+PASS baz(arg1, arg2) is 131
+PASS baz(arg1, arg2) is 133
+PASS baz(arg1, arg2) is 135
+PASS baz(arg1, arg2) is 137
+PASS baz(arg1, arg2) is 139
+PASS baz(arg1, arg2) is 141
+PASS baz(arg1, arg2) is 143
+PASS baz(arg1, arg2) is 145
+PASS baz(arg1, arg2) is 147
+PASS baz(arg1, arg2) is 149
+PASS baz(arg1, arg2) is 151
+PASS baz(arg1, arg2) is 153
+PASS baz(arg1, arg2) is 155
+PASS baz(arg1, arg2) is 157
+PASS baz(arg1, arg2) is 159
+PASS baz(arg1, arg2) is 161
+PASS baz(arg1, arg2) is 163
+PASS baz(arg1, arg2) is 165
+PASS baz(arg1, arg2) is 167
+PASS baz(arg1, arg2) is 169
+PASS baz(arg1, arg2) is 171
+PASS baz(arg1, arg2) is 173
+PASS baz(arg1, arg2) is 175
+PASS baz(arg1, arg2) is 177
+PASS baz(arg1, arg2) is 179
+PASS baz(arg1, arg2) is 181
+PASS baz(arg1, arg2) is 183
+PASS baz(arg1, arg2) is 185
+PASS baz(arg1, arg2) is 187
+PASS baz(arg1, arg2) is 189
+PASS baz(arg1, arg2) is 191
+PASS baz(arg1, arg2) is 193
+PASS baz(arg1, arg2) is 195
+PASS baz(arg1, arg2) is 197
+PASS baz(arg1, arg2) is 199
+PASS baz(arg1, arg2) is 201
+PASS baz(arg1, arg2) is 203
+PASS baz(arg1, arg2) is 205
+PASS baz(arg1, arg2) is 207
+PASS baz(arg1, arg2) is 209
+PASS baz(arg1, arg2) is 211
+PASS baz(arg1, arg2) is 213
+PASS baz(arg1, arg2) is 215
+PASS baz(arg1, arg2) is 217
+PASS baz(arg1, arg2) is 219
+PASS baz(arg1, arg2) is 221
+PASS baz(arg1, arg2) is 223
+PASS baz(arg1, arg2) is 225
+PASS baz(arg1, arg2) is 227
+PASS baz(arg1, arg2) is 229
+PASS baz(arg1, arg2) is 231
+PASS baz(arg1, arg2) is 233
+PASS baz(arg1, arg2) is 235
+PASS baz(arg1, arg2) is 237
+PASS baz(arg1, arg2) is 239
+PASS baz(arg1, arg2) is 241
+PASS baz(arg1, arg2) is 243
+PASS baz(arg1, arg2) is 245
+PASS baz(arg1, arg2) is 247
+PASS baz(arg1, arg2) is 249
+PASS baz(arg1, arg2) is 251
+PASS baz(arg1, arg2) is 253
+PASS baz(arg1, arg2) is 255
+PASS baz(arg1, arg2) is 257
+PASS baz(arg1, arg2) is 259
+PASS baz(arg1, arg2) is 261
+PASS baz(arg1, arg2) is 263
+PASS baz(arg1, arg2) is 265
+PASS baz(arg1, arg2) is 267
+PASS baz(arg1, arg2) is 269
+PASS baz(arg1, arg2) is 271
+PASS baz(arg1, arg2) is 273
+PASS baz(arg1, arg2) is 275
+PASS baz(arg1, arg2) is 277
+PASS baz(arg1, arg2) is 279
+PASS baz(arg1, arg2) is 281
+PASS baz(arg1, arg2) is 283
+PASS baz(arg1, arg2) is 285
+PASS baz(arg1, arg2) is 287
+PASS baz(arg1, arg2) is 289
+PASS baz(arg1, arg2) is 291
+PASS baz(arg1, arg2) is 293
+PASS baz(arg1, arg2) is 295
+PASS baz(arg1, arg2) is 297
+PASS baz(arg1, arg2) is 299
+PASS baz(arg1, arg2) is 301
+PASS baz(arg1, arg2) is 303
+PASS baz(arg1, arg2) is 305
+PASS baz(arg1, arg2) is 307
+PASS baz(arg1, arg2) is 309
+PASS baz(arg1, arg2) is 311
+PASS baz(arg1, arg2) is 313
+PASS baz(arg1, arg2) is 315
+PASS baz(arg1, arg2) is 317
+PASS baz(arg1, arg2) is 319
+PASS baz(arg1, arg2) is 321
+PASS baz(arg1, arg2) is 323
+PASS baz(arg1, arg2) is 325
+PASS baz(arg1, arg2) is 327
+PASS baz(arg1, arg2) is 329
+PASS baz(arg1, arg2) is 331
+PASS baz(arg1, arg2) is 333
+PASS baz(arg1, arg2) is 335
+PASS baz(arg1, arg2) is 337
+PASS baz(arg1, arg2) is 339
+PASS baz(arg1, arg2) is 341
+PASS baz(arg1, arg2) is 343
+PASS baz(arg1, arg2) is 345
+PASS baz(arg1, arg2) is 347
+PASS baz(arg1, arg2) is 349
+PASS baz(arg1, arg2) is 351
+PASS baz(arg1, arg2) is 353
+PASS baz(arg1, arg2) is 355
+PASS baz(arg1, arg2) is 357
+PASS baz(arg1, arg2) is 359
+PASS baz(arg1, arg2) is 361
+PASS baz(arg1, arg2) is 363
+PASS baz(arg1, arg2) is 365
+PASS baz(arg1, arg2) is 367
+PASS baz(arg1, arg2) is 369
+PASS baz(arg1, arg2) is 371
+PASS baz(arg1, arg2) is 373
+PASS baz(arg1, arg2) is 375
+PASS baz(arg1, arg2) is 377
+PASS baz(arg1, arg2) is 379
+PASS baz(arg1, arg2) is 381
+PASS baz(arg1, arg2) is 383
+PASS baz(arg1, arg2) is 385
+PASS baz(arg1, arg2) is 387
+PASS baz(arg1, arg2) is 389
+PASS baz(arg1, arg2) is 391
+PASS baz(arg1, arg2) is 393
+PASS baz(arg1, arg2) is 395
+PASS baz(arg1, arg2) is 397
+PASS baz(arg1, arg2) is 399
+PASS baz(arg1, arg2) is 401
+PASS baz(arg1, arg2) is 403
+PASS baz(arg1, arg2) is 405
+PASS baz(arg1, arg2) is 407
+PASS baz(arg1, arg2) is 409
+PASS baz(arg1, arg2) is 411
+PASS baz(arg1, arg2) is 413
+PASS baz(arg1, arg2) is 415
+PASS baz(arg1, arg2) is 417
+PASS baz(arg1, arg2) is 419
+PASS baz(arg1, arg2) is 421
+PASS baz(arg1, arg2) is 423
+PASS baz(arg1, arg2) is 425
+PASS baz(arg1, arg2) is 427
+PASS baz(arg1, arg2) is 429
+PASS baz(arg1, arg2) is 431
+PASS baz(arg1, arg2) is 433
+PASS baz(arg1, arg2) is 435
+PASS baz(arg1, arg2) is 437
+PASS baz(arg1, arg2) is 439
+PASS baz(arg1, arg2) is 441
+PASS baz(arg1, arg2) is 443
+PASS baz(arg1, arg2) is 445
+PASS baz(arg1, arg2) is 447
+PASS baz(arg1, arg2) is 449
+PASS baz(arg1, arg2) is 451
+PASS baz(arg1, arg2) is 453
+PASS baz(arg1, arg2) is 455
+PASS baz(arg1, arg2) is 457
+PASS baz(arg1, arg2) is 459
+PASS baz(arg1, arg2) is 461
+PASS baz(arg1, arg2) is 463
+PASS baz(arg1, arg2) is 465
+PASS baz(arg1, arg2) is 467
+PASS baz(arg1, arg2) is 469
+PASS baz(arg1, arg2) is 471
+PASS baz(arg1, arg2) is 473
+PASS baz(arg1, arg2) is 475
+PASS baz(arg1, arg2) is 477
+PASS baz(arg1, arg2) is 479
+PASS baz(arg1, arg2) is 481
+PASS baz(arg1, arg2) is 483
+PASS baz(arg1, arg2) is 485
+PASS baz(arg1, arg2) is 487
+PASS baz(arg1, arg2) is 489
+PASS baz(arg1, arg2) is 491
+PASS baz(arg1, arg2) is 493
+PASS baz(arg1, arg2) is 495
+PASS baz(arg1, arg2) is 497
+PASS baz(arg1, arg2) is 499
+PASS baz(arg1, arg2) is 501
+PASS baz(arg1, arg2) is 503
+PASS baz(arg1, arg2) is 505
+PASS baz(arg1, arg2) is 507
+PASS baz(arg1, arg2) is 509
+PASS baz(arg1, arg2) is 511
+PASS baz(arg1, arg2) is 513
+PASS baz(arg1, arg2) is 515
+PASS baz(arg1, arg2) is 517
+PASS baz(arg1, arg2) is 519
+PASS baz(arg1, arg2) is 521
+PASS baz(arg1, arg2) is 523
+PASS baz(arg1, arg2) is 525
+PASS baz(arg1, arg2) is 527
+PASS baz(arg1, arg2) is 529
+PASS baz(arg1, arg2) is 531
+PASS baz(arg1, arg2) is 533
+PASS baz(arg1, arg2) is 535
+PASS baz(arg1, arg2) is 537
+PASS baz(arg1, arg2) is 539
+PASS baz(arg1, arg2) is 541
+PASS baz(arg1, arg2) is 293.5
+PASS baz(arg1, arg2) is 294.5
+PASS baz(arg1, arg2) is 295.5
+PASS baz(arg1, arg2) is 296.5
+PASS baz(arg1, arg2) is 297.5
+PASS baz(arg1, arg2) is 298.5
+PASS baz(arg1, arg2) is 299.5
+PASS baz(arg1, arg2) is 300.5
+PASS baz(arg1, arg2) is 301.5
+PASS baz(arg1, arg2) is 302.5
+PASS baz(arg1, arg2) is 303.5
+PASS baz(arg1, arg2) is 304.5
+PASS baz(arg1, arg2) is 305.5
+PASS baz(arg1, arg2) is 306.5
+PASS baz(arg1, arg2) is 307.5
+PASS baz(arg1, arg2) is 308.5
+PASS baz(arg1, arg2) is 309.5
+PASS baz(arg1, arg2) is 310.5
+PASS baz(arg1, arg2) is 311.5
+PASS baz(arg1, arg2) is 312.5
+PASS baz(arg1, arg2) is 313.5
+PASS baz(arg1, arg2) is 314.5
+PASS baz(arg1, arg2) is 315.5
+PASS baz(arg1, arg2) is 316.5
+PASS baz(arg1, arg2) is 317.5
+PASS baz(arg1, arg2) is 318.5
+PASS baz(arg1, arg2) is 319.5
+PASS baz(arg1, arg2) is 320.5
+PASS baz(arg1, arg2) is 321.5
+PASS baz(arg1, arg2) is 322.5
+PASS baz(arg1, arg2) is 323.5
+PASS baz(arg1, arg2) is 324.5
+PASS baz(arg1, arg2) is 325.5
+PASS baz(arg1, arg2) is 326.5
+PASS baz(arg1, arg2) is 327.5
+PASS baz(arg1, arg2) is 328.5
+PASS baz(arg1, arg2) is 329.5
+PASS baz(arg1, arg2) is 330.5
+PASS baz(arg1, arg2) is 331.5
+PASS baz(arg1, arg2) is 332.5
+PASS baz(arg1, arg2) is 333.5
+PASS baz(arg1, arg2) is 334.5
+PASS baz(arg1, arg2) is 335.5
+PASS baz(arg1, arg2) is 336.5
+PASS baz(arg1, arg2) is 337.5
+PASS baz(arg1, arg2) is 338.5
+PASS baz(arg1, arg2) is 339.5
+PASS baz(arg1, arg2) is 340.5
+PASS baz(arg1, arg2) is 341.5
+PASS baz(arg1, arg2) is 342.5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-arguments-osr-exit-and-capture.js b/test/webkit/dfg-inline-arguments-osr-exit-and-capture.js
new file mode 100644 (file)
index 0000000..82a49fa
--- /dev/null
@@ -0,0 +1,56 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens if you OSR exit within inlined code that has interesting control flow with arguments that are specially formatted and you capture the arguments reflectively after the OSR exit."
+);
+
+function foo() {
+    return bar.arguments[0];
+}
+
+function bar(x, y) {
+    if (x + 5 > 4)
+        return y.f + 42 + foo();
+    else
+        return y.f + 43 + foo();
+}
+
+function baz(x, y) {
+    return bar(x, y);
+}
+
+for (var i = 0; i < 300; ++i) {
+    var expected;
+    var arg1 = i;
+    var arg2;
+    if (i < 250) {
+        arg2 = {f:i + 1};
+        expected = i + 1 + 42 + i;
+    } else {
+        arg2 = {f:1.5};
+        expected = 1.5 + 42 + i;
+    }
+    shouldBe("baz(arg1, arg2)", "" + expected);
+}
+
diff --git a/test/webkit/dfg-inline-arguments-out-of-bounds-expected.txt b/test/webkit/dfg-inline-arguments-out-of-bounds-expected.txt
new file mode 100644 (file)
index 0000000..3b4593e
--- /dev/null
@@ -0,0 +1,3032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests accessing arguments with an out-of-bounds index in an inlined function when the arguments have not been created but might be.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "[object Arguments]"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS result is "undefined"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-arguments-out-of-bounds.js b/test/webkit/dfg-inline-arguments-out-of-bounds.js
new file mode 100644 (file)
index 0000000..23b9184
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests accessing arguments with an out-of-bounds index in an inlined function when the arguments have not been created but might be."
+);
+
+var p = false;
+
+function foo() {
+    if (p)
+        return arguments;
+    return arguments[0];
+}
+
+function bar() {
+    return foo();
+}
+
+var expected = "\"undefined\"";
+for (var i = 0; i < 3000; ++i) {
+    if (i == 1000) {
+        p = true;
+        expected = "\"[object Arguments]\"";
+    }
+    if (i == 2000) {
+        p = false;
+        expected = "\"undefined\"";
+    }
+    result = "" + bar();
+    shouldBe("result", expected);
+}
+
diff --git a/test/webkit/dfg-inline-arguments-reset-changetype-expected.txt b/test/webkit/dfg-inline-arguments-reset-changetype-expected.txt
new file mode 100644 (file)
index 0000000..5bb386c
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves function.arguments functionality if the arguments are reassigned with a different type.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a0, a0, c0"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a1, a1, c1"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a2, a2, c2"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a3, a3, c3"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a4, a4, c4"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a5, a5, c5"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a6, a6, c6"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a7, a7, c7"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a8, a8, c8"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a9, a9, c9"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a10, a10, c10"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a11, a11, c11"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a12, a12, c12"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a13, a13, c13"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a14, a14, c14"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a15, a15, c15"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a16, a16, c16"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a17, a17, c17"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a18, a18, c18"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a19, a19, c19"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a20, a20, c20"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a21, a21, c21"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a22, a22, c22"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a23, a23, c23"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a24, a24, c24"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a25, a25, c25"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a26, a26, c26"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a27, a27, c27"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a28, a28, c28"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a29, a29, c29"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a30, a30, c30"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a31, a31, c31"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a32, a32, c32"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a33, a33, c33"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a34, a34, c34"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a35, a35, c35"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a36, a36, c36"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a37, a37, c37"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a38, a38, c38"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a39, a39, c39"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a40, a40, c40"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a41, a41, c41"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a42, a42, c42"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a43, a43, c43"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a44, a44, c44"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a45, a45, c45"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a46, a46, c46"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a47, a47, c47"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a48, a48, c48"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a49, a49, c49"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a50, a50, c50"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a51, a51, c51"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a52, a52, c52"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a53, a53, c53"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a54, a54, c54"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a55, a55, c55"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a56, a56, c56"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a57, a57, c57"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a58, a58, c58"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a59, a59, c59"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a60, a60, c60"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a61, a61, c61"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a62, a62, c62"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a63, a63, c63"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a64, a64, c64"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a65, a65, c65"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a66, a66, c66"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a67, a67, c67"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a68, a68, c68"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a69, a69, c69"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a70, a70, c70"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a71, a71, c71"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a72, a72, c72"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a73, a73, c73"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a74, a74, c74"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a75, a75, c75"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a76, a76, c76"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a77, a77, c77"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a78, a78, c78"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a79, a79, c79"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a80, a80, c80"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a81, a81, c81"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a82, a82, c82"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a83, a83, c83"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a84, a84, c84"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a85, a85, c85"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a86, a86, c86"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a87, a87, c87"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a88, a88, c88"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a89, a89, c89"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a90, a90, c90"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a91, a91, c91"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a92, a92, c92"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a93, a93, c93"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a94, a94, c94"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a95, a95, c95"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a96, a96, c96"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a97, a97, c97"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a98, a98, c98"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a99, a99, c99"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a100, a100, c100"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a101, a101, c101"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a102, a102, c102"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a103, a103, c103"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a104, a104, c104"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a105, a105, c105"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a106, a106, c106"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a107, a107, c107"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a108, a108, c108"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a109, a109, c109"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a110, a110, c110"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a111, a111, c111"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a112, a112, c112"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a113, a113, c113"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a114, a114, c114"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a115, a115, c115"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a116, a116, c116"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a117, a117, c117"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a118, a118, c118"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a119, a119, c119"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a120, a120, c120"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a121, a121, c121"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a122, a122, c122"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a123, a123, c123"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a124, a124, c124"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a125, a125, c125"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a126, a126, c126"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a127, a127, c127"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a128, a128, c128"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a129, a129, c129"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a130, a130, c130"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a131, a131, c131"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a132, a132, c132"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a133, a133, c133"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a134, a134, c134"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a135, a135, c135"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a136, a136, c136"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a137, a137, c137"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a138, a138, c138"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a139, a139, c139"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a140, a140, c140"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a141, a141, c141"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a142, a142, c142"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a143, a143, c143"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a144, a144, c144"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a145, a145, c145"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a146, a146, c146"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a147, a147, c147"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a148, a148, c148"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a149, a149, c149"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a150, a150, c150"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a151, a151, c151"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a152, a152, c152"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a153, a153, c153"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a154, a154, c154"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a155, a155, c155"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a156, a156, c156"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a157, a157, c157"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a158, a158, c158"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a159, a159, c159"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a160, a160, c160"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a161, a161, c161"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a162, a162, c162"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a163, a163, c163"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a164, a164, c164"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a165, a165, c165"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a166, a166, c166"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a167, a167, c167"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a168, a168, c168"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a169, a169, c169"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a170, a170, c170"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a171, a171, c171"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a172, a172, c172"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a173, a173, c173"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a174, a174, c174"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a175, a175, c175"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a176, a176, c176"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a177, a177, c177"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a178, a178, c178"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a179, a179, c179"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a180, a180, c180"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a181, a181, c181"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a182, a182, c182"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a183, a183, c183"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a184, a184, c184"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a185, a185, c185"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a186, a186, c186"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a187, a187, c187"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a188, a188, c188"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a189, a189, c189"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a190, a190, c190"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a191, a191, c191"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a192, a192, c192"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a193, a193, c193"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a194, a194, c194"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a195, a195, c195"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a196, a196, c196"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a197, a197, c197"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a198, a198, c198"
+PASS argsToStr(baz("a" + __i, __i + 2, "c" + __i)) is "[object Arguments]: a199, a199, c199"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-arguments-reset-changetype.js b/test/webkit/dfg-inline-arguments-reset-changetype.js
new file mode 100644 (file)
index 0000000..a7baa0f
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves function.arguments functionality if the arguments are reassigned with a different type."
+);
+
+function foo() {
+    return bar.arguments;
+}
+
+function bar(a,b,c) {
+    b = a;
+    return foo(a,b,c);
+}
+
+function baz(a,b,c) {
+    return bar(a,b,c);
+}
+
+function argsToStr(args) {
+    var str = args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += args[i];
+    }
+    return str;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("argsToStr(baz(\"a\" + __i, __i + 2, \"c\" + __i))", "\"[object Arguments]: a" + __i + ", a" + __i + ", c" + __i + "\"");
+
+var successfullyParsed = true;
diff --git a/test/webkit/dfg-inline-arguments-reset-expected.txt b/test/webkit/dfg-inline-arguments-reset-expected.txt
new file mode 100644 (file)
index 0000000..bec2e69
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves function.arguments functionality if the arguments are reassigned.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a0, a0, c0"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a1, a1, c1"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a2, a2, c2"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a3, a3, c3"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a4, a4, c4"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a5, a5, c5"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a6, a6, c6"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a7, a7, c7"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a8, a8, c8"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a9, a9, c9"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a10, a10, c10"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a11, a11, c11"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a12, a12, c12"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a13, a13, c13"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a14, a14, c14"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a15, a15, c15"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a16, a16, c16"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a17, a17, c17"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a18, a18, c18"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a19, a19, c19"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a20, a20, c20"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a21, a21, c21"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a22, a22, c22"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a23, a23, c23"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a24, a24, c24"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a25, a25, c25"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a26, a26, c26"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a27, a27, c27"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a28, a28, c28"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a29, a29, c29"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a30, a30, c30"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a31, a31, c31"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a32, a32, c32"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a33, a33, c33"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a34, a34, c34"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a35, a35, c35"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a36, a36, c36"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a37, a37, c37"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a38, a38, c38"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a39, a39, c39"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a40, a40, c40"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a41, a41, c41"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a42, a42, c42"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a43, a43, c43"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a44, a44, c44"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a45, a45, c45"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a46, a46, c46"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a47, a47, c47"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a48, a48, c48"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a49, a49, c49"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a50, a50, c50"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a51, a51, c51"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a52, a52, c52"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a53, a53, c53"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a54, a54, c54"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a55, a55, c55"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a56, a56, c56"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a57, a57, c57"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a58, a58, c58"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a59, a59, c59"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a60, a60, c60"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a61, a61, c61"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a62, a62, c62"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a63, a63, c63"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a64, a64, c64"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a65, a65, c65"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a66, a66, c66"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a67, a67, c67"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a68, a68, c68"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a69, a69, c69"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a70, a70, c70"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a71, a71, c71"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a72, a72, c72"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a73, a73, c73"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a74, a74, c74"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a75, a75, c75"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a76, a76, c76"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a77, a77, c77"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a78, a78, c78"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a79, a79, c79"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a80, a80, c80"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a81, a81, c81"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a82, a82, c82"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a83, a83, c83"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a84, a84, c84"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a85, a85, c85"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a86, a86, c86"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a87, a87, c87"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a88, a88, c88"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a89, a89, c89"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a90, a90, c90"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a91, a91, c91"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a92, a92, c92"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a93, a93, c93"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a94, a94, c94"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a95, a95, c95"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a96, a96, c96"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a97, a97, c97"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a98, a98, c98"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a99, a99, c99"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a100, a100, c100"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a101, a101, c101"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a102, a102, c102"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a103, a103, c103"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a104, a104, c104"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a105, a105, c105"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a106, a106, c106"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a107, a107, c107"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a108, a108, c108"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a109, a109, c109"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a110, a110, c110"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a111, a111, c111"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a112, a112, c112"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a113, a113, c113"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a114, a114, c114"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a115, a115, c115"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a116, a116, c116"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a117, a117, c117"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a118, a118, c118"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a119, a119, c119"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a120, a120, c120"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a121, a121, c121"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a122, a122, c122"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a123, a123, c123"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a124, a124, c124"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a125, a125, c125"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a126, a126, c126"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a127, a127, c127"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a128, a128, c128"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a129, a129, c129"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a130, a130, c130"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a131, a131, c131"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a132, a132, c132"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a133, a133, c133"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a134, a134, c134"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a135, a135, c135"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a136, a136, c136"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a137, a137, c137"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a138, a138, c138"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a139, a139, c139"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a140, a140, c140"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a141, a141, c141"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a142, a142, c142"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a143, a143, c143"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a144, a144, c144"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a145, a145, c145"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a146, a146, c146"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a147, a147, c147"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a148, a148, c148"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a149, a149, c149"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a150, a150, c150"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a151, a151, c151"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a152, a152, c152"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a153, a153, c153"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a154, a154, c154"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a155, a155, c155"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a156, a156, c156"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a157, a157, c157"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a158, a158, c158"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a159, a159, c159"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a160, a160, c160"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a161, a161, c161"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a162, a162, c162"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a163, a163, c163"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a164, a164, c164"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a165, a165, c165"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a166, a166, c166"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a167, a167, c167"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a168, a168, c168"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a169, a169, c169"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a170, a170, c170"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a171, a171, c171"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a172, a172, c172"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a173, a173, c173"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a174, a174, c174"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a175, a175, c175"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a176, a176, c176"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a177, a177, c177"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a178, a178, c178"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a179, a179, c179"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a180, a180, c180"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a181, a181, c181"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a182, a182, c182"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a183, a183, c183"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a184, a184, c184"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a185, a185, c185"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a186, a186, c186"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a187, a187, c187"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a188, a188, c188"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a189, a189, c189"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a190, a190, c190"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a191, a191, c191"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a192, a192, c192"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a193, a193, c193"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a194, a194, c194"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a195, a195, c195"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a196, a196, c196"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a197, a197, c197"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a198, a198, c198"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a199, a199, c199"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-arguments-reset.js b/test/webkit/dfg-inline-arguments-reset.js
new file mode 100644 (file)
index 0000000..e4b9559
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves function.arguments functionality if the arguments are reassigned."
+);
+
+function foo() {
+    return bar.arguments;
+}
+
+function bar(a,b,c) {
+    b = a;
+    return foo(a,b,c);
+}
+
+function baz(a,b,c) {
+    return bar(a,b,c);
+}
+
+function argsToStr(args) {
+    var str = args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += args[i];
+    }
+    return str;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("argsToStr(baz(\"a\" + __i, \"b\" + __i, \"c\" + __i))", "\"[object Arguments]: a" + __i + ", a" + __i + ", c" + __i + "\"");
+
+var successfullyParsed = true;
diff --git a/test/webkit/dfg-inline-arguments-simple-expected.txt b/test/webkit/dfg-inline-arguments-simple-expected.txt
new file mode 100644 (file)
index 0000000..75064ac
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves basic function.arguments functionality.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a0, b0, c0"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a1, b1, c1"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a2, b2, c2"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a3, b3, c3"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a4, b4, c4"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a5, b5, c5"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a6, b6, c6"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a7, b7, c7"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a8, b8, c8"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a9, b9, c9"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a10, b10, c10"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a11, b11, c11"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a12, b12, c12"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a13, b13, c13"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a14, b14, c14"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a15, b15, c15"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a16, b16, c16"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a17, b17, c17"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a18, b18, c18"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a19, b19, c19"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a20, b20, c20"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a21, b21, c21"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a22, b22, c22"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a23, b23, c23"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a24, b24, c24"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a25, b25, c25"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a26, b26, c26"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a27, b27, c27"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a28, b28, c28"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a29, b29, c29"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a30, b30, c30"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a31, b31, c31"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a32, b32, c32"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a33, b33, c33"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a34, b34, c34"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a35, b35, c35"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a36, b36, c36"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a37, b37, c37"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a38, b38, c38"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a39, b39, c39"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a40, b40, c40"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a41, b41, c41"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a42, b42, c42"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a43, b43, c43"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a44, b44, c44"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a45, b45, c45"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a46, b46, c46"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a47, b47, c47"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a48, b48, c48"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a49, b49, c49"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a50, b50, c50"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a51, b51, c51"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a52, b52, c52"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a53, b53, c53"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a54, b54, c54"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a55, b55, c55"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a56, b56, c56"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a57, b57, c57"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a58, b58, c58"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a59, b59, c59"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a60, b60, c60"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a61, b61, c61"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a62, b62, c62"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a63, b63, c63"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a64, b64, c64"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a65, b65, c65"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a66, b66, c66"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a67, b67, c67"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a68, b68, c68"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a69, b69, c69"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a70, b70, c70"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a71, b71, c71"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a72, b72, c72"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a73, b73, c73"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a74, b74, c74"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a75, b75, c75"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a76, b76, c76"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a77, b77, c77"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a78, b78, c78"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a79, b79, c79"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a80, b80, c80"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a81, b81, c81"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a82, b82, c82"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a83, b83, c83"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a84, b84, c84"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a85, b85, c85"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a86, b86, c86"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a87, b87, c87"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a88, b88, c88"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a89, b89, c89"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a90, b90, c90"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a91, b91, c91"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a92, b92, c92"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a93, b93, c93"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a94, b94, c94"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a95, b95, c95"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a96, b96, c96"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a97, b97, c97"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a98, b98, c98"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a99, b99, c99"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a100, b100, c100"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a101, b101, c101"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a102, b102, c102"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a103, b103, c103"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a104, b104, c104"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a105, b105, c105"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a106, b106, c106"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a107, b107, c107"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a108, b108, c108"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a109, b109, c109"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a110, b110, c110"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a111, b111, c111"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a112, b112, c112"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a113, b113, c113"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a114, b114, c114"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a115, b115, c115"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a116, b116, c116"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a117, b117, c117"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a118, b118, c118"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a119, b119, c119"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a120, b120, c120"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a121, b121, c121"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a122, b122, c122"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a123, b123, c123"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a124, b124, c124"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a125, b125, c125"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a126, b126, c126"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a127, b127, c127"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a128, b128, c128"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a129, b129, c129"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a130, b130, c130"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a131, b131, c131"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a132, b132, c132"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a133, b133, c133"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a134, b134, c134"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a135, b135, c135"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a136, b136, c136"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a137, b137, c137"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a138, b138, c138"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a139, b139, c139"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a140, b140, c140"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a141, b141, c141"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a142, b142, c142"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a143, b143, c143"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a144, b144, c144"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a145, b145, c145"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a146, b146, c146"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a147, b147, c147"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a148, b148, c148"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a149, b149, c149"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a150, b150, c150"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a151, b151, c151"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a152, b152, c152"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a153, b153, c153"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a154, b154, c154"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a155, b155, c155"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a156, b156, c156"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a157, b157, c157"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a158, b158, c158"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a159, b159, c159"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a160, b160, c160"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a161, b161, c161"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a162, b162, c162"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a163, b163, c163"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a164, b164, c164"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a165, b165, c165"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a166, b166, c166"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a167, b167, c167"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a168, b168, c168"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a169, b169, c169"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a170, b170, c170"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a171, b171, c171"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a172, b172, c172"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a173, b173, c173"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a174, b174, c174"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a175, b175, c175"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a176, b176, c176"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a177, b177, c177"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a178, b178, c178"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a179, b179, c179"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a180, b180, c180"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a181, b181, c181"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a182, b182, c182"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a183, b183, c183"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a184, b184, c184"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a185, b185, c185"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a186, b186, c186"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a187, b187, c187"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a188, b188, c188"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a189, b189, c189"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a190, b190, c190"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a191, b191, c191"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a192, b192, c192"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a193, b193, c193"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a194, b194, c194"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a195, b195, c195"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a196, b196, c196"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a197, b197, c197"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a198, b198, c198"
+PASS argsToStr(baz("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a199, b199, c199"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-arguments-simple.js b/test/webkit/dfg-inline-arguments-simple.js
new file mode 100644 (file)
index 0000000..547282c
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves basic function.arguments functionality."
+);
+
+function foo() {
+    return bar.arguments;
+}
+
+function bar(a,b,c) {
+    return foo(a,b,c);
+}
+
+function baz(a,b,c) {
+    return bar(a,b,c);
+}
+
+function argsToStr(args) {
+    var str = args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += args[i];
+    }
+    return str;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("argsToStr(baz(\"a\" + __i, \"b\" + __i, \"c\" + __i))", "\"[object Arguments]: a" + __i + ", b" + __i + ", c" + __i + "\"");
+
+var successfullyParsed = true;
diff --git a/test/webkit/dfg-inline-arguments-use-directly-from-inlined-code-expected.txt b/test/webkit/dfg-inline-arguments-use-directly-from-inlined-code-expected.txt
new file mode 100644 (file)
index 0000000..fed012d
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves basic function.arguments functionality when said functionality is used directly from within an inlined code block.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a0, b0, c0"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a1, b1, c1"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a2, b2, c2"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a3, b3, c3"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a4, b4, c4"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a5, b5, c5"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a6, b6, c6"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a7, b7, c7"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a8, b8, c8"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a9, b9, c9"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a10, b10, c10"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a11, b11, c11"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a12, b12, c12"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a13, b13, c13"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a14, b14, c14"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a15, b15, c15"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a16, b16, c16"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a17, b17, c17"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a18, b18, c18"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a19, b19, c19"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a20, b20, c20"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a21, b21, c21"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a22, b22, c22"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a23, b23, c23"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a24, b24, c24"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a25, b25, c25"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a26, b26, c26"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a27, b27, c27"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a28, b28, c28"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a29, b29, c29"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a30, b30, c30"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a31, b31, c31"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a32, b32, c32"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a33, b33, c33"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a34, b34, c34"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a35, b35, c35"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a36, b36, c36"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a37, b37, c37"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a38, b38, c38"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a39, b39, c39"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a40, b40, c40"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a41, b41, c41"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a42, b42, c42"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a43, b43, c43"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a44, b44, c44"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a45, b45, c45"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a46, b46, c46"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a47, b47, c47"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a48, b48, c48"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a49, b49, c49"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a50, b50, c50"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a51, b51, c51"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a52, b52, c52"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a53, b53, c53"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a54, b54, c54"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a55, b55, c55"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a56, b56, c56"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a57, b57, c57"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a58, b58, c58"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a59, b59, c59"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a60, b60, c60"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a61, b61, c61"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a62, b62, c62"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a63, b63, c63"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a64, b64, c64"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a65, b65, c65"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a66, b66, c66"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a67, b67, c67"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a68, b68, c68"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a69, b69, c69"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a70, b70, c70"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a71, b71, c71"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a72, b72, c72"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a73, b73, c73"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a74, b74, c74"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a75, b75, c75"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a76, b76, c76"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a77, b77, c77"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a78, b78, c78"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a79, b79, c79"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a80, b80, c80"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a81, b81, c81"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a82, b82, c82"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a83, b83, c83"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a84, b84, c84"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a85, b85, c85"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a86, b86, c86"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a87, b87, c87"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a88, b88, c88"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a89, b89, c89"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a90, b90, c90"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a91, b91, c91"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a92, b92, c92"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a93, b93, c93"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a94, b94, c94"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a95, b95, c95"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a96, b96, c96"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a97, b97, c97"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a98, b98, c98"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a99, b99, c99"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a100, b100, c100"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a101, b101, c101"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a102, b102, c102"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a103, b103, c103"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a104, b104, c104"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a105, b105, c105"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a106, b106, c106"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a107, b107, c107"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a108, b108, c108"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a109, b109, c109"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a110, b110, c110"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a111, b111, c111"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a112, b112, c112"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a113, b113, c113"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a114, b114, c114"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a115, b115, c115"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a116, b116, c116"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a117, b117, c117"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a118, b118, c118"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a119, b119, c119"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a120, b120, c120"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a121, b121, c121"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a122, b122, c122"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a123, b123, c123"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a124, b124, c124"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a125, b125, c125"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a126, b126, c126"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a127, b127, c127"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a128, b128, c128"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a129, b129, c129"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a130, b130, c130"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a131, b131, c131"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a132, b132, c132"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a133, b133, c133"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a134, b134, c134"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a135, b135, c135"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a136, b136, c136"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a137, b137, c137"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a138, b138, c138"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a139, b139, c139"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a140, b140, c140"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a141, b141, c141"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a142, b142, c142"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a143, b143, c143"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a144, b144, c144"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a145, b145, c145"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a146, b146, c146"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a147, b147, c147"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a148, b148, c148"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a149, b149, c149"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a150, b150, c150"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a151, b151, c151"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a152, b152, c152"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a153, b153, c153"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a154, b154, c154"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a155, b155, c155"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a156, b156, c156"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a157, b157, c157"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a158, b158, c158"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a159, b159, c159"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a160, b160, c160"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a161, b161, c161"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a162, b162, c162"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a163, b163, c163"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a164, b164, c164"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a165, b165, c165"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a166, b166, c166"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a167, b167, c167"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a168, b168, c168"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a169, b169, c169"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a170, b170, c170"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a171, b171, c171"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a172, b172, c172"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a173, b173, c173"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a174, b174, c174"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a175, b175, c175"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a176, b176, c176"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a177, b177, c177"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a178, b178, c178"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a179, b179, c179"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a180, b180, c180"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a181, b181, c181"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a182, b182, c182"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a183, b183, c183"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a184, b184, c184"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a185, b185, c185"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a186, b186, c186"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a187, b187, c187"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a188, b188, c188"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a189, b189, c189"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a190, b190, c190"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a191, b191, c191"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a192, b192, c192"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a193, b193, c193"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a194, b194, c194"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a195, b195, c195"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a196, b196, c196"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a197, b197, c197"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a198, b198, c198"
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) is "[object Arguments]: a199, b199, c199"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-arguments-use-directly-from-inlined-code.js b/test/webkit/dfg-inline-arguments-use-directly-from-inlined-code.js
new file mode 100644 (file)
index 0000000..a1c5ca2
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves basic function.arguments functionality when said functionality is used directly from within an inlined code block."
+);
+
+function foo(a,b,c) {
+    return foo.arguments;
+}
+
+function bar(a,b,c) {
+    return foo(a,b,c);
+}
+
+function argsToStr(args) {
+    var str = args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += args[i];
+    }
+    return str;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("argsToStr(bar(\"a\" + __i, \"b\" + __i, \"c\" + __i))", "\"[object Arguments]: a" + __i + ", b" + __i + ", c" + __i + "\"");
+
diff --git a/test/webkit/dfg-inline-arguments-use-from-all-the-places-broken-expected.txt b/test/webkit/dfg-inline-arguments-use-from-all-the-places-broken-expected.txt
new file mode 100644 (file)
index 0000000..e5ff607
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This attempts to test that inlining preserves basic function.arguments functionality when said functionality is used from inside and outside getters and from inlined code, all at once; but it fails at this and instead finds other bugs particularly in the DFG stack layout machinery.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS argsToStr(bar("a" + __i, "b" + __i, "c" + __i)) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-arguments-use-from-all-the-places-broken.js b/test/webkit/dfg-inline-arguments-use-from-all-the-places-broken.js
new file mode 100644 (file)
index 0000000..b4fa6c1
--- /dev/null
@@ -0,0 +1,61 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This attempts to test that inlining preserves basic function.arguments functionality when said functionality is used from inside and outside getters and from inlined code, all at once; but it fails at this and instead finds other bugs particularly in the DFG stack layout machinery."
+);
+
+function foo(o,b,c) {
+    return [foo.arguments, bar.arguments].concat(o.f);
+}
+
+function fuzz(a, b) {
+    return [foo.arguments, bar.arguments, getter.arguments, fuzz.arguments];
+}
+
+function getter() {
+    return [foo.arguments, bar.arguments, getter.arguments].concat(fuzz(42, 56));
+}
+
+o = {}
+o.__defineGetter__("f", getter);
+
+function bar(o,b,c) {
+    return [bar.arguments].concat(foo(o,b,c));
+}
+
+function argsToStr(args) {
+    if (args.length === void 0 || args.charAt !== void 0)
+        return "" + args
+    var str = "[" + args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += argsToStr(args[i]);
+    }
+    return str + "]";
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldThrow("argsToStr(bar(\"a\" + __i, \"b\" + __i, \"c\" + __i))");
+
diff --git a/test/webkit/dfg-inline-arguments-use-from-all-the-places-expected.txt b/test/webkit/dfg-inline-arguments-use-from-all-the-places-expected.txt
new file mode 100644 (file)
index 0000000..347a579
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves basic function.arguments functionality when said functionality is used from inside and outside getters and from inlined code, all at once.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b0, c0], [[object Arguments]: [object Object], b0, c0], [[object Arguments]: [object Object], b0, c0], [[object Arguments]: [object Object], b0, c0], [[object Arguments]: [object Object], b0, c0], [[object Arguments]: ], [[object Arguments]: [object Object], b0, c0], [[object Arguments]: [object Object], b0, c0], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b1, c1], [[object Arguments]: [object Object], b1, c1], [[object Arguments]: [object Object], b1, c1], [[object Arguments]: [object Object], b1, c1], [[object Arguments]: [object Object], b1, c1], [[object Arguments]: ], [[object Arguments]: [object Object], b1, c1], [[object Arguments]: [object Object], b1, c1], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b2, c2], [[object Arguments]: [object Object], b2, c2], [[object Arguments]: [object Object], b2, c2], [[object Arguments]: [object Object], b2, c2], [[object Arguments]: [object Object], b2, c2], [[object Arguments]: ], [[object Arguments]: [object Object], b2, c2], [[object Arguments]: [object Object], b2, c2], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b3, c3], [[object Arguments]: [object Object], b3, c3], [[object Arguments]: [object Object], b3, c3], [[object Arguments]: [object Object], b3, c3], [[object Arguments]: [object Object], b3, c3], [[object Arguments]: ], [[object Arguments]: [object Object], b3, c3], [[object Arguments]: [object Object], b3, c3], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b4, c4], [[object Arguments]: [object Object], b4, c4], [[object Arguments]: [object Object], b4, c4], [[object Arguments]: [object Object], b4, c4], [[object Arguments]: [object Object], b4, c4], [[object Arguments]: ], [[object Arguments]: [object Object], b4, c4], [[object Arguments]: [object Object], b4, c4], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b5, c5], [[object Arguments]: [object Object], b5, c5], [[object Arguments]: [object Object], b5, c5], [[object Arguments]: [object Object], b5, c5], [[object Arguments]: [object Object], b5, c5], [[object Arguments]: ], [[object Arguments]: [object Object], b5, c5], [[object Arguments]: [object Object], b5, c5], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b6, c6], [[object Arguments]: [object Object], b6, c6], [[object Arguments]: [object Object], b6, c6], [[object Arguments]: [object Object], b6, c6], [[object Arguments]: [object Object], b6, c6], [[object Arguments]: ], [[object Arguments]: [object Object], b6, c6], [[object Arguments]: [object Object], b6, c6], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b7, c7], [[object Arguments]: [object Object], b7, c7], [[object Arguments]: [object Object], b7, c7], [[object Arguments]: [object Object], b7, c7], [[object Arguments]: [object Object], b7, c7], [[object Arguments]: ], [[object Arguments]: [object Object], b7, c7], [[object Arguments]: [object Object], b7, c7], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b8, c8], [[object Arguments]: [object Object], b8, c8], [[object Arguments]: [object Object], b8, c8], [[object Arguments]: [object Object], b8, c8], [[object Arguments]: [object Object], b8, c8], [[object Arguments]: ], [[object Arguments]: [object Object], b8, c8], [[object Arguments]: [object Object], b8, c8], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b9, c9], [[object Arguments]: [object Object], b9, c9], [[object Arguments]: [object Object], b9, c9], [[object Arguments]: [object Object], b9, c9], [[object Arguments]: [object Object], b9, c9], [[object Arguments]: ], [[object Arguments]: [object Object], b9, c9], [[object Arguments]: [object Object], b9, c9], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b10, c10], [[object Arguments]: [object Object], b10, c10], [[object Arguments]: [object Object], b10, c10], [[object Arguments]: [object Object], b10, c10], [[object Arguments]: [object Object], b10, c10], [[object Arguments]: ], [[object Arguments]: [object Object], b10, c10], [[object Arguments]: [object Object], b10, c10], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b11, c11], [[object Arguments]: [object Object], b11, c11], [[object Arguments]: [object Object], b11, c11], [[object Arguments]: [object Object], b11, c11], [[object Arguments]: [object Object], b11, c11], [[object Arguments]: ], [[object Arguments]: [object Object], b11, c11], [[object Arguments]: [object Object], b11, c11], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b12, c12], [[object Arguments]: [object Object], b12, c12], [[object Arguments]: [object Object], b12, c12], [[object Arguments]: [object Object], b12, c12], [[object Arguments]: [object Object], b12, c12], [[object Arguments]: ], [[object Arguments]: [object Object], b12, c12], [[object Arguments]: [object Object], b12, c12], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b13, c13], [[object Arguments]: [object Object], b13, c13], [[object Arguments]: [object Object], b13, c13], [[object Arguments]: [object Object], b13, c13], [[object Arguments]: [object Object], b13, c13], [[object Arguments]: ], [[object Arguments]: [object Object], b13, c13], [[object Arguments]: [object Object], b13, c13], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b14, c14], [[object Arguments]: [object Object], b14, c14], [[object Arguments]: [object Object], b14, c14], [[object Arguments]: [object Object], b14, c14], [[object Arguments]: [object Object], b14, c14], [[object Arguments]: ], [[object Arguments]: [object Object], b14, c14], [[object Arguments]: [object Object], b14, c14], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b15, c15], [[object Arguments]: [object Object], b15, c15], [[object Arguments]: [object Object], b15, c15], [[object Arguments]: [object Object], b15, c15], [[object Arguments]: [object Object], b15, c15], [[object Arguments]: ], [[object Arguments]: [object Object], b15, c15], [[object Arguments]: [object Object], b15, c15], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b16, c16], [[object Arguments]: [object Object], b16, c16], [[object Arguments]: [object Object], b16, c16], [[object Arguments]: [object Object], b16, c16], [[object Arguments]: [object Object], b16, c16], [[object Arguments]: ], [[object Arguments]: [object Object], b16, c16], [[object Arguments]: [object Object], b16, c16], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b17, c17], [[object Arguments]: [object Object], b17, c17], [[object Arguments]: [object Object], b17, c17], [[object Arguments]: [object Object], b17, c17], [[object Arguments]: [object Object], b17, c17], [[object Arguments]: ], [[object Arguments]: [object Object], b17, c17], [[object Arguments]: [object Object], b17, c17], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b18, c18], [[object Arguments]: [object Object], b18, c18], [[object Arguments]: [object Object], b18, c18], [[object Arguments]: [object Object], b18, c18], [[object Arguments]: [object Object], b18, c18], [[object Arguments]: ], [[object Arguments]: [object Object], b18, c18], [[object Arguments]: [object Object], b18, c18], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b19, c19], [[object Arguments]: [object Object], b19, c19], [[object Arguments]: [object Object], b19, c19], [[object Arguments]: [object Object], b19, c19], [[object Arguments]: [object Object], b19, c19], [[object Arguments]: ], [[object Arguments]: [object Object], b19, c19], [[object Arguments]: [object Object], b19, c19], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b20, c20], [[object Arguments]: [object Object], b20, c20], [[object Arguments]: [object Object], b20, c20], [[object Arguments]: [object Object], b20, c20], [[object Arguments]: [object Object], b20, c20], [[object Arguments]: ], [[object Arguments]: [object Object], b20, c20], [[object Arguments]: [object Object], b20, c20], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b21, c21], [[object Arguments]: [object Object], b21, c21], [[object Arguments]: [object Object], b21, c21], [[object Arguments]: [object Object], b21, c21], [[object Arguments]: [object Object], b21, c21], [[object Arguments]: ], [[object Arguments]: [object Object], b21, c21], [[object Arguments]: [object Object], b21, c21], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b22, c22], [[object Arguments]: [object Object], b22, c22], [[object Arguments]: [object Object], b22, c22], [[object Arguments]: [object Object], b22, c22], [[object Arguments]: [object Object], b22, c22], [[object Arguments]: ], [[object Arguments]: [object Object], b22, c22], [[object Arguments]: [object Object], b22, c22], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b23, c23], [[object Arguments]: [object Object], b23, c23], [[object Arguments]: [object Object], b23, c23], [[object Arguments]: [object Object], b23, c23], [[object Arguments]: [object Object], b23, c23], [[object Arguments]: ], [[object Arguments]: [object Object], b23, c23], [[object Arguments]: [object Object], b23, c23], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b24, c24], [[object Arguments]: [object Object], b24, c24], [[object Arguments]: [object Object], b24, c24], [[object Arguments]: [object Object], b24, c24], [[object Arguments]: [object Object], b24, c24], [[object Arguments]: ], [[object Arguments]: [object Object], b24, c24], [[object Arguments]: [object Object], b24, c24], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b25, c25], [[object Arguments]: [object Object], b25, c25], [[object Arguments]: [object Object], b25, c25], [[object Arguments]: [object Object], b25, c25], [[object Arguments]: [object Object], b25, c25], [[object Arguments]: ], [[object Arguments]: [object Object], b25, c25], [[object Arguments]: [object Object], b25, c25], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b26, c26], [[object Arguments]: [object Object], b26, c26], [[object Arguments]: [object Object], b26, c26], [[object Arguments]: [object Object], b26, c26], [[object Arguments]: [object Object], b26, c26], [[object Arguments]: ], [[object Arguments]: [object Object], b26, c26], [[object Arguments]: [object Object], b26, c26], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b27, c27], [[object Arguments]: [object Object], b27, c27], [[object Arguments]: [object Object], b27, c27], [[object Arguments]: [object Object], b27, c27], [[object Arguments]: [object Object], b27, c27], [[object Arguments]: ], [[object Arguments]: [object Object], b27, c27], [[object Arguments]: [object Object], b27, c27], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b28, c28], [[object Arguments]: [object Object], b28, c28], [[object Arguments]: [object Object], b28, c28], [[object Arguments]: [object Object], b28, c28], [[object Arguments]: [object Object], b28, c28], [[object Arguments]: ], [[object Arguments]: [object Object], b28, c28], [[object Arguments]: [object Object], b28, c28], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b29, c29], [[object Arguments]: [object Object], b29, c29], [[object Arguments]: [object Object], b29, c29], [[object Arguments]: [object Object], b29, c29], [[object Arguments]: [object Object], b29, c29], [[object Arguments]: ], [[object Arguments]: [object Object], b29, c29], [[object Arguments]: [object Object], b29, c29], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b30, c30], [[object Arguments]: [object Object], b30, c30], [[object Arguments]: [object Object], b30, c30], [[object Arguments]: [object Object], b30, c30], [[object Arguments]: [object Object], b30, c30], [[object Arguments]: ], [[object Arguments]: [object Object], b30, c30], [[object Arguments]: [object Object], b30, c30], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b31, c31], [[object Arguments]: [object Object], b31, c31], [[object Arguments]: [object Object], b31, c31], [[object Arguments]: [object Object], b31, c31], [[object Arguments]: [object Object], b31, c31], [[object Arguments]: ], [[object Arguments]: [object Object], b31, c31], [[object Arguments]: [object Object], b31, c31], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b32, c32], [[object Arguments]: [object Object], b32, c32], [[object Arguments]: [object Object], b32, c32], [[object Arguments]: [object Object], b32, c32], [[object Arguments]: [object Object], b32, c32], [[object Arguments]: ], [[object Arguments]: [object Object], b32, c32], [[object Arguments]: [object Object], b32, c32], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b33, c33], [[object Arguments]: [object Object], b33, c33], [[object Arguments]: [object Object], b33, c33], [[object Arguments]: [object Object], b33, c33], [[object Arguments]: [object Object], b33, c33], [[object Arguments]: ], [[object Arguments]: [object Object], b33, c33], [[object Arguments]: [object Object], b33, c33], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b34, c34], [[object Arguments]: [object Object], b34, c34], [[object Arguments]: [object Object], b34, c34], [[object Arguments]: [object Object], b34, c34], [[object Arguments]: [object Object], b34, c34], [[object Arguments]: ], [[object Arguments]: [object Object], b34, c34], [[object Arguments]: [object Object], b34, c34], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b35, c35], [[object Arguments]: [object Object], b35, c35], [[object Arguments]: [object Object], b35, c35], [[object Arguments]: [object Object], b35, c35], [[object Arguments]: [object Object], b35, c35], [[object Arguments]: ], [[object Arguments]: [object Object], b35, c35], [[object Arguments]: [object Object], b35, c35], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b36, c36], [[object Arguments]: [object Object], b36, c36], [[object Arguments]: [object Object], b36, c36], [[object Arguments]: [object Object], b36, c36], [[object Arguments]: [object Object], b36, c36], [[object Arguments]: ], [[object Arguments]: [object Object], b36, c36], [[object Arguments]: [object Object], b36, c36], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b37, c37], [[object Arguments]: [object Object], b37, c37], [[object Arguments]: [object Object], b37, c37], [[object Arguments]: [object Object], b37, c37], [[object Arguments]: [object Object], b37, c37], [[object Arguments]: ], [[object Arguments]: [object Object], b37, c37], [[object Arguments]: [object Object], b37, c37], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b38, c38], [[object Arguments]: [object Object], b38, c38], [[object Arguments]: [object Object], b38, c38], [[object Arguments]: [object Object], b38, c38], [[object Arguments]: [object Object], b38, c38], [[object Arguments]: ], [[object Arguments]: [object Object], b38, c38], [[object Arguments]: [object Object], b38, c38], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b39, c39], [[object Arguments]: [object Object], b39, c39], [[object Arguments]: [object Object], b39, c39], [[object Arguments]: [object Object], b39, c39], [[object Arguments]: [object Object], b39, c39], [[object Arguments]: ], [[object Arguments]: [object Object], b39, c39], [[object Arguments]: [object Object], b39, c39], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b40, c40], [[object Arguments]: [object Object], b40, c40], [[object Arguments]: [object Object], b40, c40], [[object Arguments]: [object Object], b40, c40], [[object Arguments]: [object Object], b40, c40], [[object Arguments]: ], [[object Arguments]: [object Object], b40, c40], [[object Arguments]: [object Object], b40, c40], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b41, c41], [[object Arguments]: [object Object], b41, c41], [[object Arguments]: [object Object], b41, c41], [[object Arguments]: [object Object], b41, c41], [[object Arguments]: [object Object], b41, c41], [[object Arguments]: ], [[object Arguments]: [object Object], b41, c41], [[object Arguments]: [object Object], b41, c41], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b42, c42], [[object Arguments]: [object Object], b42, c42], [[object Arguments]: [object Object], b42, c42], [[object Arguments]: [object Object], b42, c42], [[object Arguments]: [object Object], b42, c42], [[object Arguments]: ], [[object Arguments]: [object Object], b42, c42], [[object Arguments]: [object Object], b42, c42], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b43, c43], [[object Arguments]: [object Object], b43, c43], [[object Arguments]: [object Object], b43, c43], [[object Arguments]: [object Object], b43, c43], [[object Arguments]: [object Object], b43, c43], [[object Arguments]: ], [[object Arguments]: [object Object], b43, c43], [[object Arguments]: [object Object], b43, c43], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b44, c44], [[object Arguments]: [object Object], b44, c44], [[object Arguments]: [object Object], b44, c44], [[object Arguments]: [object Object], b44, c44], [[object Arguments]: [object Object], b44, c44], [[object Arguments]: ], [[object Arguments]: [object Object], b44, c44], [[object Arguments]: [object Object], b44, c44], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b45, c45], [[object Arguments]: [object Object], b45, c45], [[object Arguments]: [object Object], b45, c45], [[object Arguments]: [object Object], b45, c45], [[object Arguments]: [object Object], b45, c45], [[object Arguments]: ], [[object Arguments]: [object Object], b45, c45], [[object Arguments]: [object Object], b45, c45], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b46, c46], [[object Arguments]: [object Object], b46, c46], [[object Arguments]: [object Object], b46, c46], [[object Arguments]: [object Object], b46, c46], [[object Arguments]: [object Object], b46, c46], [[object Arguments]: ], [[object Arguments]: [object Object], b46, c46], [[object Arguments]: [object Object], b46, c46], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b47, c47], [[object Arguments]: [object Object], b47, c47], [[object Arguments]: [object Object], b47, c47], [[object Arguments]: [object Object], b47, c47], [[object Arguments]: [object Object], b47, c47], [[object Arguments]: ], [[object Arguments]: [object Object], b47, c47], [[object Arguments]: [object Object], b47, c47], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b48, c48], [[object Arguments]: [object Object], b48, c48], [[object Arguments]: [object Object], b48, c48], [[object Arguments]: [object Object], b48, c48], [[object Arguments]: [object Object], b48, c48], [[object Arguments]: ], [[object Arguments]: [object Object], b48, c48], [[object Arguments]: [object Object], b48, c48], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b49, c49], [[object Arguments]: [object Object], b49, c49], [[object Arguments]: [object Object], b49, c49], [[object Arguments]: [object Object], b49, c49], [[object Arguments]: [object Object], b49, c49], [[object Arguments]: ], [[object Arguments]: [object Object], b49, c49], [[object Arguments]: [object Object], b49, c49], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b50, c50], [[object Arguments]: [object Object], b50, c50], [[object Arguments]: [object Object], b50, c50], [[object Arguments]: [object Object], b50, c50], [[object Arguments]: [object Object], b50, c50], [[object Arguments]: ], [[object Arguments]: [object Object], b50, c50], [[object Arguments]: [object Object], b50, c50], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b51, c51], [[object Arguments]: [object Object], b51, c51], [[object Arguments]: [object Object], b51, c51], [[object Arguments]: [object Object], b51, c51], [[object Arguments]: [object Object], b51, c51], [[object Arguments]: ], [[object Arguments]: [object Object], b51, c51], [[object Arguments]: [object Object], b51, c51], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b52, c52], [[object Arguments]: [object Object], b52, c52], [[object Arguments]: [object Object], b52, c52], [[object Arguments]: [object Object], b52, c52], [[object Arguments]: [object Object], b52, c52], [[object Arguments]: ], [[object Arguments]: [object Object], b52, c52], [[object Arguments]: [object Object], b52, c52], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b53, c53], [[object Arguments]: [object Object], b53, c53], [[object Arguments]: [object Object], b53, c53], [[object Arguments]: [object Object], b53, c53], [[object Arguments]: [object Object], b53, c53], [[object Arguments]: ], [[object Arguments]: [object Object], b53, c53], [[object Arguments]: [object Object], b53, c53], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b54, c54], [[object Arguments]: [object Object], b54, c54], [[object Arguments]: [object Object], b54, c54], [[object Arguments]: [object Object], b54, c54], [[object Arguments]: [object Object], b54, c54], [[object Arguments]: ], [[object Arguments]: [object Object], b54, c54], [[object Arguments]: [object Object], b54, c54], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b55, c55], [[object Arguments]: [object Object], b55, c55], [[object Arguments]: [object Object], b55, c55], [[object Arguments]: [object Object], b55, c55], [[object Arguments]: [object Object], b55, c55], [[object Arguments]: ], [[object Arguments]: [object Object], b55, c55], [[object Arguments]: [object Object], b55, c55], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b56, c56], [[object Arguments]: [object Object], b56, c56], [[object Arguments]: [object Object], b56, c56], [[object Arguments]: [object Object], b56, c56], [[object Arguments]: [object Object], b56, c56], [[object Arguments]: ], [[object Arguments]: [object Object], b56, c56], [[object Arguments]: [object Object], b56, c56], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b57, c57], [[object Arguments]: [object Object], b57, c57], [[object Arguments]: [object Object], b57, c57], [[object Arguments]: [object Object], b57, c57], [[object Arguments]: [object Object], b57, c57], [[object Arguments]: ], [[object Arguments]: [object Object], b57, c57], [[object Arguments]: [object Object], b57, c57], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b58, c58], [[object Arguments]: [object Object], b58, c58], [[object Arguments]: [object Object], b58, c58], [[object Arguments]: [object Object], b58, c58], [[object Arguments]: [object Object], b58, c58], [[object Arguments]: ], [[object Arguments]: [object Object], b58, c58], [[object Arguments]: [object Object], b58, c58], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b59, c59], [[object Arguments]: [object Object], b59, c59], [[object Arguments]: [object Object], b59, c59], [[object Arguments]: [object Object], b59, c59], [[object Arguments]: [object Object], b59, c59], [[object Arguments]: ], [[object Arguments]: [object Object], b59, c59], [[object Arguments]: [object Object], b59, c59], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b60, c60], [[object Arguments]: [object Object], b60, c60], [[object Arguments]: [object Object], b60, c60], [[object Arguments]: [object Object], b60, c60], [[object Arguments]: [object Object], b60, c60], [[object Arguments]: ], [[object Arguments]: [object Object], b60, c60], [[object Arguments]: [object Object], b60, c60], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b61, c61], [[object Arguments]: [object Object], b61, c61], [[object Arguments]: [object Object], b61, c61], [[object Arguments]: [object Object], b61, c61], [[object Arguments]: [object Object], b61, c61], [[object Arguments]: ], [[object Arguments]: [object Object], b61, c61], [[object Arguments]: [object Object], b61, c61], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b62, c62], [[object Arguments]: [object Object], b62, c62], [[object Arguments]: [object Object], b62, c62], [[object Arguments]: [object Object], b62, c62], [[object Arguments]: [object Object], b62, c62], [[object Arguments]: ], [[object Arguments]: [object Object], b62, c62], [[object Arguments]: [object Object], b62, c62], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b63, c63], [[object Arguments]: [object Object], b63, c63], [[object Arguments]: [object Object], b63, c63], [[object Arguments]: [object Object], b63, c63], [[object Arguments]: [object Object], b63, c63], [[object Arguments]: ], [[object Arguments]: [object Object], b63, c63], [[object Arguments]: [object Object], b63, c63], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b64, c64], [[object Arguments]: [object Object], b64, c64], [[object Arguments]: [object Object], b64, c64], [[object Arguments]: [object Object], b64, c64], [[object Arguments]: [object Object], b64, c64], [[object Arguments]: ], [[object Arguments]: [object Object], b64, c64], [[object Arguments]: [object Object], b64, c64], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b65, c65], [[object Arguments]: [object Object], b65, c65], [[object Arguments]: [object Object], b65, c65], [[object Arguments]: [object Object], b65, c65], [[object Arguments]: [object Object], b65, c65], [[object Arguments]: ], [[object Arguments]: [object Object], b65, c65], [[object Arguments]: [object Object], b65, c65], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b66, c66], [[object Arguments]: [object Object], b66, c66], [[object Arguments]: [object Object], b66, c66], [[object Arguments]: [object Object], b66, c66], [[object Arguments]: [object Object], b66, c66], [[object Arguments]: ], [[object Arguments]: [object Object], b66, c66], [[object Arguments]: [object Object], b66, c66], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b67, c67], [[object Arguments]: [object Object], b67, c67], [[object Arguments]: [object Object], b67, c67], [[object Arguments]: [object Object], b67, c67], [[object Arguments]: [object Object], b67, c67], [[object Arguments]: ], [[object Arguments]: [object Object], b67, c67], [[object Arguments]: [object Object], b67, c67], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b68, c68], [[object Arguments]: [object Object], b68, c68], [[object Arguments]: [object Object], b68, c68], [[object Arguments]: [object Object], b68, c68], [[object Arguments]: [object Object], b68, c68], [[object Arguments]: ], [[object Arguments]: [object Object], b68, c68], [[object Arguments]: [object Object], b68, c68], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b69, c69], [[object Arguments]: [object Object], b69, c69], [[object Arguments]: [object Object], b69, c69], [[object Arguments]: [object Object], b69, c69], [[object Arguments]: [object Object], b69, c69], [[object Arguments]: ], [[object Arguments]: [object Object], b69, c69], [[object Arguments]: [object Object], b69, c69], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b70, c70], [[object Arguments]: [object Object], b70, c70], [[object Arguments]: [object Object], b70, c70], [[object Arguments]: [object Object], b70, c70], [[object Arguments]: [object Object], b70, c70], [[object Arguments]: ], [[object Arguments]: [object Object], b70, c70], [[object Arguments]: [object Object], b70, c70], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b71, c71], [[object Arguments]: [object Object], b71, c71], [[object Arguments]: [object Object], b71, c71], [[object Arguments]: [object Object], b71, c71], [[object Arguments]: [object Object], b71, c71], [[object Arguments]: ], [[object Arguments]: [object Object], b71, c71], [[object Arguments]: [object Object], b71, c71], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b72, c72], [[object Arguments]: [object Object], b72, c72], [[object Arguments]: [object Object], b72, c72], [[object Arguments]: [object Object], b72, c72], [[object Arguments]: [object Object], b72, c72], [[object Arguments]: ], [[object Arguments]: [object Object], b72, c72], [[object Arguments]: [object Object], b72, c72], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b73, c73], [[object Arguments]: [object Object], b73, c73], [[object Arguments]: [object Object], b73, c73], [[object Arguments]: [object Object], b73, c73], [[object Arguments]: [object Object], b73, c73], [[object Arguments]: ], [[object Arguments]: [object Object], b73, c73], [[object Arguments]: [object Object], b73, c73], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b74, c74], [[object Arguments]: [object Object], b74, c74], [[object Arguments]: [object Object], b74, c74], [[object Arguments]: [object Object], b74, c74], [[object Arguments]: [object Object], b74, c74], [[object Arguments]: ], [[object Arguments]: [object Object], b74, c74], [[object Arguments]: [object Object], b74, c74], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b75, c75], [[object Arguments]: [object Object], b75, c75], [[object Arguments]: [object Object], b75, c75], [[object Arguments]: [object Object], b75, c75], [[object Arguments]: [object Object], b75, c75], [[object Arguments]: ], [[object Arguments]: [object Object], b75, c75], [[object Arguments]: [object Object], b75, c75], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b76, c76], [[object Arguments]: [object Object], b76, c76], [[object Arguments]: [object Object], b76, c76], [[object Arguments]: [object Object], b76, c76], [[object Arguments]: [object Object], b76, c76], [[object Arguments]: ], [[object Arguments]: [object Object], b76, c76], [[object Arguments]: [object Object], b76, c76], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b77, c77], [[object Arguments]: [object Object], b77, c77], [[object Arguments]: [object Object], b77, c77], [[object Arguments]: [object Object], b77, c77], [[object Arguments]: [object Object], b77, c77], [[object Arguments]: ], [[object Arguments]: [object Object], b77, c77], [[object Arguments]: [object Object], b77, c77], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b78, c78], [[object Arguments]: [object Object], b78, c78], [[object Arguments]: [object Object], b78, c78], [[object Arguments]: [object Object], b78, c78], [[object Arguments]: [object Object], b78, c78], [[object Arguments]: ], [[object Arguments]: [object Object], b78, c78], [[object Arguments]: [object Object], b78, c78], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b79, c79], [[object Arguments]: [object Object], b79, c79], [[object Arguments]: [object Object], b79, c79], [[object Arguments]: [object Object], b79, c79], [[object Arguments]: [object Object], b79, c79], [[object Arguments]: ], [[object Arguments]: [object Object], b79, c79], [[object Arguments]: [object Object], b79, c79], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b80, c80], [[object Arguments]: [object Object], b80, c80], [[object Arguments]: [object Object], b80, c80], [[object Arguments]: [object Object], b80, c80], [[object Arguments]: [object Object], b80, c80], [[object Arguments]: ], [[object Arguments]: [object Object], b80, c80], [[object Arguments]: [object Object], b80, c80], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b81, c81], [[object Arguments]: [object Object], b81, c81], [[object Arguments]: [object Object], b81, c81], [[object Arguments]: [object Object], b81, c81], [[object Arguments]: [object Object], b81, c81], [[object Arguments]: ], [[object Arguments]: [object Object], b81, c81], [[object Arguments]: [object Object], b81, c81], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b82, c82], [[object Arguments]: [object Object], b82, c82], [[object Arguments]: [object Object], b82, c82], [[object Arguments]: [object Object], b82, c82], [[object Arguments]: [object Object], b82, c82], [[object Arguments]: ], [[object Arguments]: [object Object], b82, c82], [[object Arguments]: [object Object], b82, c82], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b83, c83], [[object Arguments]: [object Object], b83, c83], [[object Arguments]: [object Object], b83, c83], [[object Arguments]: [object Object], b83, c83], [[object Arguments]: [object Object], b83, c83], [[object Arguments]: ], [[object Arguments]: [object Object], b83, c83], [[object Arguments]: [object Object], b83, c83], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b84, c84], [[object Arguments]: [object Object], b84, c84], [[object Arguments]: [object Object], b84, c84], [[object Arguments]: [object Object], b84, c84], [[object Arguments]: [object Object], b84, c84], [[object Arguments]: ], [[object Arguments]: [object Object], b84, c84], [[object Arguments]: [object Object], b84, c84], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b85, c85], [[object Arguments]: [object Object], b85, c85], [[object Arguments]: [object Object], b85, c85], [[object Arguments]: [object Object], b85, c85], [[object Arguments]: [object Object], b85, c85], [[object Arguments]: ], [[object Arguments]: [object Object], b85, c85], [[object Arguments]: [object Object], b85, c85], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b86, c86], [[object Arguments]: [object Object], b86, c86], [[object Arguments]: [object Object], b86, c86], [[object Arguments]: [object Object], b86, c86], [[object Arguments]: [object Object], b86, c86], [[object Arguments]: ], [[object Arguments]: [object Object], b86, c86], [[object Arguments]: [object Object], b86, c86], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b87, c87], [[object Arguments]: [object Object], b87, c87], [[object Arguments]: [object Object], b87, c87], [[object Arguments]: [object Object], b87, c87], [[object Arguments]: [object Object], b87, c87], [[object Arguments]: ], [[object Arguments]: [object Object], b87, c87], [[object Arguments]: [object Object], b87, c87], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b88, c88], [[object Arguments]: [object Object], b88, c88], [[object Arguments]: [object Object], b88, c88], [[object Arguments]: [object Object], b88, c88], [[object Arguments]: [object Object], b88, c88], [[object Arguments]: ], [[object Arguments]: [object Object], b88, c88], [[object Arguments]: [object Object], b88, c88], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b89, c89], [[object Arguments]: [object Object], b89, c89], [[object Arguments]: [object Object], b89, c89], [[object Arguments]: [object Object], b89, c89], [[object Arguments]: [object Object], b89, c89], [[object Arguments]: ], [[object Arguments]: [object Object], b89, c89], [[object Arguments]: [object Object], b89, c89], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b90, c90], [[object Arguments]: [object Object], b90, c90], [[object Arguments]: [object Object], b90, c90], [[object Arguments]: [object Object], b90, c90], [[object Arguments]: [object Object], b90, c90], [[object Arguments]: ], [[object Arguments]: [object Object], b90, c90], [[object Arguments]: [object Object], b90, c90], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b91, c91], [[object Arguments]: [object Object], b91, c91], [[object Arguments]: [object Object], b91, c91], [[object Arguments]: [object Object], b91, c91], [[object Arguments]: [object Object], b91, c91], [[object Arguments]: ], [[object Arguments]: [object Object], b91, c91], [[object Arguments]: [object Object], b91, c91], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b92, c92], [[object Arguments]: [object Object], b92, c92], [[object Arguments]: [object Object], b92, c92], [[object Arguments]: [object Object], b92, c92], [[object Arguments]: [object Object], b92, c92], [[object Arguments]: ], [[object Arguments]: [object Object], b92, c92], [[object Arguments]: [object Object], b92, c92], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b93, c93], [[object Arguments]: [object Object], b93, c93], [[object Arguments]: [object Object], b93, c93], [[object Arguments]: [object Object], b93, c93], [[object Arguments]: [object Object], b93, c93], [[object Arguments]: ], [[object Arguments]: [object Object], b93, c93], [[object Arguments]: [object Object], b93, c93], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b94, c94], [[object Arguments]: [object Object], b94, c94], [[object Arguments]: [object Object], b94, c94], [[object Arguments]: [object Object], b94, c94], [[object Arguments]: [object Object], b94, c94], [[object Arguments]: ], [[object Arguments]: [object Object], b94, c94], [[object Arguments]: [object Object], b94, c94], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b95, c95], [[object Arguments]: [object Object], b95, c95], [[object Arguments]: [object Object], b95, c95], [[object Arguments]: [object Object], b95, c95], [[object Arguments]: [object Object], b95, c95], [[object Arguments]: ], [[object Arguments]: [object Object], b95, c95], [[object Arguments]: [object Object], b95, c95], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b96, c96], [[object Arguments]: [object Object], b96, c96], [[object Arguments]: [object Object], b96, c96], [[object Arguments]: [object Object], b96, c96], [[object Arguments]: [object Object], b96, c96], [[object Arguments]: ], [[object Arguments]: [object Object], b96, c96], [[object Arguments]: [object Object], b96, c96], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b97, c97], [[object Arguments]: [object Object], b97, c97], [[object Arguments]: [object Object], b97, c97], [[object Arguments]: [object Object], b97, c97], [[object Arguments]: [object Object], b97, c97], [[object Arguments]: ], [[object Arguments]: [object Object], b97, c97], [[object Arguments]: [object Object], b97, c97], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b98, c98], [[object Arguments]: [object Object], b98, c98], [[object Arguments]: [object Object], b98, c98], [[object Arguments]: [object Object], b98, c98], [[object Arguments]: [object Object], b98, c98], [[object Arguments]: ], [[object Arguments]: [object Object], b98, c98], [[object Arguments]: [object Object], b98, c98], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b99, c99], [[object Arguments]: [object Object], b99, c99], [[object Arguments]: [object Object], b99, c99], [[object Arguments]: [object Object], b99, c99], [[object Arguments]: [object Object], b99, c99], [[object Arguments]: ], [[object Arguments]: [object Object], b99, c99], [[object Arguments]: [object Object], b99, c99], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b100, c100], [[object Arguments]: [object Object], b100, c100], [[object Arguments]: [object Object], b100, c100], [[object Arguments]: [object Object], b100, c100], [[object Arguments]: [object Object], b100, c100], [[object Arguments]: ], [[object Arguments]: [object Object], b100, c100], [[object Arguments]: [object Object], b100, c100], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b101, c101], [[object Arguments]: [object Object], b101, c101], [[object Arguments]: [object Object], b101, c101], [[object Arguments]: [object Object], b101, c101], [[object Arguments]: [object Object], b101, c101], [[object Arguments]: ], [[object Arguments]: [object Object], b101, c101], [[object Arguments]: [object Object], b101, c101], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b102, c102], [[object Arguments]: [object Object], b102, c102], [[object Arguments]: [object Object], b102, c102], [[object Arguments]: [object Object], b102, c102], [[object Arguments]: [object Object], b102, c102], [[object Arguments]: ], [[object Arguments]: [object Object], b102, c102], [[object Arguments]: [object Object], b102, c102], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b103, c103], [[object Arguments]: [object Object], b103, c103], [[object Arguments]: [object Object], b103, c103], [[object Arguments]: [object Object], b103, c103], [[object Arguments]: [object Object], b103, c103], [[object Arguments]: ], [[object Arguments]: [object Object], b103, c103], [[object Arguments]: [object Object], b103, c103], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b104, c104], [[object Arguments]: [object Object], b104, c104], [[object Arguments]: [object Object], b104, c104], [[object Arguments]: [object Object], b104, c104], [[object Arguments]: [object Object], b104, c104], [[object Arguments]: ], [[object Arguments]: [object Object], b104, c104], [[object Arguments]: [object Object], b104, c104], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b105, c105], [[object Arguments]: [object Object], b105, c105], [[object Arguments]: [object Object], b105, c105], [[object Arguments]: [object Object], b105, c105], [[object Arguments]: [object Object], b105, c105], [[object Arguments]: ], [[object Arguments]: [object Object], b105, c105], [[object Arguments]: [object Object], b105, c105], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b106, c106], [[object Arguments]: [object Object], b106, c106], [[object Arguments]: [object Object], b106, c106], [[object Arguments]: [object Object], b106, c106], [[object Arguments]: [object Object], b106, c106], [[object Arguments]: ], [[object Arguments]: [object Object], b106, c106], [[object Arguments]: [object Object], b106, c106], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b107, c107], [[object Arguments]: [object Object], b107, c107], [[object Arguments]: [object Object], b107, c107], [[object Arguments]: [object Object], b107, c107], [[object Arguments]: [object Object], b107, c107], [[object Arguments]: ], [[object Arguments]: [object Object], b107, c107], [[object Arguments]: [object Object], b107, c107], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b108, c108], [[object Arguments]: [object Object], b108, c108], [[object Arguments]: [object Object], b108, c108], [[object Arguments]: [object Object], b108, c108], [[object Arguments]: [object Object], b108, c108], [[object Arguments]: ], [[object Arguments]: [object Object], b108, c108], [[object Arguments]: [object Object], b108, c108], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b109, c109], [[object Arguments]: [object Object], b109, c109], [[object Arguments]: [object Object], b109, c109], [[object Arguments]: [object Object], b109, c109], [[object Arguments]: [object Object], b109, c109], [[object Arguments]: ], [[object Arguments]: [object Object], b109, c109], [[object Arguments]: [object Object], b109, c109], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b110, c110], [[object Arguments]: [object Object], b110, c110], [[object Arguments]: [object Object], b110, c110], [[object Arguments]: [object Object], b110, c110], [[object Arguments]: [object Object], b110, c110], [[object Arguments]: ], [[object Arguments]: [object Object], b110, c110], [[object Arguments]: [object Object], b110, c110], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b111, c111], [[object Arguments]: [object Object], b111, c111], [[object Arguments]: [object Object], b111, c111], [[object Arguments]: [object Object], b111, c111], [[object Arguments]: [object Object], b111, c111], [[object Arguments]: ], [[object Arguments]: [object Object], b111, c111], [[object Arguments]: [object Object], b111, c111], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b112, c112], [[object Arguments]: [object Object], b112, c112], [[object Arguments]: [object Object], b112, c112], [[object Arguments]: [object Object], b112, c112], [[object Arguments]: [object Object], b112, c112], [[object Arguments]: ], [[object Arguments]: [object Object], b112, c112], [[object Arguments]: [object Object], b112, c112], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b113, c113], [[object Arguments]: [object Object], b113, c113], [[object Arguments]: [object Object], b113, c113], [[object Arguments]: [object Object], b113, c113], [[object Arguments]: [object Object], b113, c113], [[object Arguments]: ], [[object Arguments]: [object Object], b113, c113], [[object Arguments]: [object Object], b113, c113], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b114, c114], [[object Arguments]: [object Object], b114, c114], [[object Arguments]: [object Object], b114, c114], [[object Arguments]: [object Object], b114, c114], [[object Arguments]: [object Object], b114, c114], [[object Arguments]: ], [[object Arguments]: [object Object], b114, c114], [[object Arguments]: [object Object], b114, c114], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b115, c115], [[object Arguments]: [object Object], b115, c115], [[object Arguments]: [object Object], b115, c115], [[object Arguments]: [object Object], b115, c115], [[object Arguments]: [object Object], b115, c115], [[object Arguments]: ], [[object Arguments]: [object Object], b115, c115], [[object Arguments]: [object Object], b115, c115], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b116, c116], [[object Arguments]: [object Object], b116, c116], [[object Arguments]: [object Object], b116, c116], [[object Arguments]: [object Object], b116, c116], [[object Arguments]: [object Object], b116, c116], [[object Arguments]: ], [[object Arguments]: [object Object], b116, c116], [[object Arguments]: [object Object], b116, c116], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b117, c117], [[object Arguments]: [object Object], b117, c117], [[object Arguments]: [object Object], b117, c117], [[object Arguments]: [object Object], b117, c117], [[object Arguments]: [object Object], b117, c117], [[object Arguments]: ], [[object Arguments]: [object Object], b117, c117], [[object Arguments]: [object Object], b117, c117], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b118, c118], [[object Arguments]: [object Object], b118, c118], [[object Arguments]: [object Object], b118, c118], [[object Arguments]: [object Object], b118, c118], [[object Arguments]: [object Object], b118, c118], [[object Arguments]: ], [[object Arguments]: [object Object], b118, c118], [[object Arguments]: [object Object], b118, c118], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b119, c119], [[object Arguments]: [object Object], b119, c119], [[object Arguments]: [object Object], b119, c119], [[object Arguments]: [object Object], b119, c119], [[object Arguments]: [object Object], b119, c119], [[object Arguments]: ], [[object Arguments]: [object Object], b119, c119], [[object Arguments]: [object Object], b119, c119], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b120, c120], [[object Arguments]: [object Object], b120, c120], [[object Arguments]: [object Object], b120, c120], [[object Arguments]: [object Object], b120, c120], [[object Arguments]: [object Object], b120, c120], [[object Arguments]: ], [[object Arguments]: [object Object], b120, c120], [[object Arguments]: [object Object], b120, c120], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b121, c121], [[object Arguments]: [object Object], b121, c121], [[object Arguments]: [object Object], b121, c121], [[object Arguments]: [object Object], b121, c121], [[object Arguments]: [object Object], b121, c121], [[object Arguments]: ], [[object Arguments]: [object Object], b121, c121], [[object Arguments]: [object Object], b121, c121], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b122, c122], [[object Arguments]: [object Object], b122, c122], [[object Arguments]: [object Object], b122, c122], [[object Arguments]: [object Object], b122, c122], [[object Arguments]: [object Object], b122, c122], [[object Arguments]: ], [[object Arguments]: [object Object], b122, c122], [[object Arguments]: [object Object], b122, c122], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b123, c123], [[object Arguments]: [object Object], b123, c123], [[object Arguments]: [object Object], b123, c123], [[object Arguments]: [object Object], b123, c123], [[object Arguments]: [object Object], b123, c123], [[object Arguments]: ], [[object Arguments]: [object Object], b123, c123], [[object Arguments]: [object Object], b123, c123], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b124, c124], [[object Arguments]: [object Object], b124, c124], [[object Arguments]: [object Object], b124, c124], [[object Arguments]: [object Object], b124, c124], [[object Arguments]: [object Object], b124, c124], [[object Arguments]: ], [[object Arguments]: [object Object], b124, c124], [[object Arguments]: [object Object], b124, c124], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b125, c125], [[object Arguments]: [object Object], b125, c125], [[object Arguments]: [object Object], b125, c125], [[object Arguments]: [object Object], b125, c125], [[object Arguments]: [object Object], b125, c125], [[object Arguments]: ], [[object Arguments]: [object Object], b125, c125], [[object Arguments]: [object Object], b125, c125], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b126, c126], [[object Arguments]: [object Object], b126, c126], [[object Arguments]: [object Object], b126, c126], [[object Arguments]: [object Object], b126, c126], [[object Arguments]: [object Object], b126, c126], [[object Arguments]: ], [[object Arguments]: [object Object], b126, c126], [[object Arguments]: [object Object], b126, c126], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b127, c127], [[object Arguments]: [object Object], b127, c127], [[object Arguments]: [object Object], b127, c127], [[object Arguments]: [object Object], b127, c127], [[object Arguments]: [object Object], b127, c127], [[object Arguments]: ], [[object Arguments]: [object Object], b127, c127], [[object Arguments]: [object Object], b127, c127], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b128, c128], [[object Arguments]: [object Object], b128, c128], [[object Arguments]: [object Object], b128, c128], [[object Arguments]: [object Object], b128, c128], [[object Arguments]: [object Object], b128, c128], [[object Arguments]: ], [[object Arguments]: [object Object], b128, c128], [[object Arguments]: [object Object], b128, c128], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b129, c129], [[object Arguments]: [object Object], b129, c129], [[object Arguments]: [object Object], b129, c129], [[object Arguments]: [object Object], b129, c129], [[object Arguments]: [object Object], b129, c129], [[object Arguments]: ], [[object Arguments]: [object Object], b129, c129], [[object Arguments]: [object Object], b129, c129], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b130, c130], [[object Arguments]: [object Object], b130, c130], [[object Arguments]: [object Object], b130, c130], [[object Arguments]: [object Object], b130, c130], [[object Arguments]: [object Object], b130, c130], [[object Arguments]: ], [[object Arguments]: [object Object], b130, c130], [[object Arguments]: [object Object], b130, c130], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b131, c131], [[object Arguments]: [object Object], b131, c131], [[object Arguments]: [object Object], b131, c131], [[object Arguments]: [object Object], b131, c131], [[object Arguments]: [object Object], b131, c131], [[object Arguments]: ], [[object Arguments]: [object Object], b131, c131], [[object Arguments]: [object Object], b131, c131], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b132, c132], [[object Arguments]: [object Object], b132, c132], [[object Arguments]: [object Object], b132, c132], [[object Arguments]: [object Object], b132, c132], [[object Arguments]: [object Object], b132, c132], [[object Arguments]: ], [[object Arguments]: [object Object], b132, c132], [[object Arguments]: [object Object], b132, c132], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b133, c133], [[object Arguments]: [object Object], b133, c133], [[object Arguments]: [object Object], b133, c133], [[object Arguments]: [object Object], b133, c133], [[object Arguments]: [object Object], b133, c133], [[object Arguments]: ], [[object Arguments]: [object Object], b133, c133], [[object Arguments]: [object Object], b133, c133], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b134, c134], [[object Arguments]: [object Object], b134, c134], [[object Arguments]: [object Object], b134, c134], [[object Arguments]: [object Object], b134, c134], [[object Arguments]: [object Object], b134, c134], [[object Arguments]: ], [[object Arguments]: [object Object], b134, c134], [[object Arguments]: [object Object], b134, c134], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b135, c135], [[object Arguments]: [object Object], b135, c135], [[object Arguments]: [object Object], b135, c135], [[object Arguments]: [object Object], b135, c135], [[object Arguments]: [object Object], b135, c135], [[object Arguments]: ], [[object Arguments]: [object Object], b135, c135], [[object Arguments]: [object Object], b135, c135], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b136, c136], [[object Arguments]: [object Object], b136, c136], [[object Arguments]: [object Object], b136, c136], [[object Arguments]: [object Object], b136, c136], [[object Arguments]: [object Object], b136, c136], [[object Arguments]: ], [[object Arguments]: [object Object], b136, c136], [[object Arguments]: [object Object], b136, c136], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b137, c137], [[object Arguments]: [object Object], b137, c137], [[object Arguments]: [object Object], b137, c137], [[object Arguments]: [object Object], b137, c137], [[object Arguments]: [object Object], b137, c137], [[object Arguments]: ], [[object Arguments]: [object Object], b137, c137], [[object Arguments]: [object Object], b137, c137], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b138, c138], [[object Arguments]: [object Object], b138, c138], [[object Arguments]: [object Object], b138, c138], [[object Arguments]: [object Object], b138, c138], [[object Arguments]: [object Object], b138, c138], [[object Arguments]: ], [[object Arguments]: [object Object], b138, c138], [[object Arguments]: [object Object], b138, c138], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b139, c139], [[object Arguments]: [object Object], b139, c139], [[object Arguments]: [object Object], b139, c139], [[object Arguments]: [object Object], b139, c139], [[object Arguments]: [object Object], b139, c139], [[object Arguments]: ], [[object Arguments]: [object Object], b139, c139], [[object Arguments]: [object Object], b139, c139], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b140, c140], [[object Arguments]: [object Object], b140, c140], [[object Arguments]: [object Object], b140, c140], [[object Arguments]: [object Object], b140, c140], [[object Arguments]: [object Object], b140, c140], [[object Arguments]: ], [[object Arguments]: [object Object], b140, c140], [[object Arguments]: [object Object], b140, c140], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b141, c141], [[object Arguments]: [object Object], b141, c141], [[object Arguments]: [object Object], b141, c141], [[object Arguments]: [object Object], b141, c141], [[object Arguments]: [object Object], b141, c141], [[object Arguments]: ], [[object Arguments]: [object Object], b141, c141], [[object Arguments]: [object Object], b141, c141], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b142, c142], [[object Arguments]: [object Object], b142, c142], [[object Arguments]: [object Object], b142, c142], [[object Arguments]: [object Object], b142, c142], [[object Arguments]: [object Object], b142, c142], [[object Arguments]: ], [[object Arguments]: [object Object], b142, c142], [[object Arguments]: [object Object], b142, c142], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b143, c143], [[object Arguments]: [object Object], b143, c143], [[object Arguments]: [object Object], b143, c143], [[object Arguments]: [object Object], b143, c143], [[object Arguments]: [object Object], b143, c143], [[object Arguments]: ], [[object Arguments]: [object Object], b143, c143], [[object Arguments]: [object Object], b143, c143], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b144, c144], [[object Arguments]: [object Object], b144, c144], [[object Arguments]: [object Object], b144, c144], [[object Arguments]: [object Object], b144, c144], [[object Arguments]: [object Object], b144, c144], [[object Arguments]: ], [[object Arguments]: [object Object], b144, c144], [[object Arguments]: [object Object], b144, c144], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b145, c145], [[object Arguments]: [object Object], b145, c145], [[object Arguments]: [object Object], b145, c145], [[object Arguments]: [object Object], b145, c145], [[object Arguments]: [object Object], b145, c145], [[object Arguments]: ], [[object Arguments]: [object Object], b145, c145], [[object Arguments]: [object Object], b145, c145], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b146, c146], [[object Arguments]: [object Object], b146, c146], [[object Arguments]: [object Object], b146, c146], [[object Arguments]: [object Object], b146, c146], [[object Arguments]: [object Object], b146, c146], [[object Arguments]: ], [[object Arguments]: [object Object], b146, c146], [[object Arguments]: [object Object], b146, c146], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b147, c147], [[object Arguments]: [object Object], b147, c147], [[object Arguments]: [object Object], b147, c147], [[object Arguments]: [object Object], b147, c147], [[object Arguments]: [object Object], b147, c147], [[object Arguments]: ], [[object Arguments]: [object Object], b147, c147], [[object Arguments]: [object Object], b147, c147], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b148, c148], [[object Arguments]: [object Object], b148, c148], [[object Arguments]: [object Object], b148, c148], [[object Arguments]: [object Object], b148, c148], [[object Arguments]: [object Object], b148, c148], [[object Arguments]: ], [[object Arguments]: [object Object], b148, c148], [[object Arguments]: [object Object], b148, c148], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b149, c149], [[object Arguments]: [object Object], b149, c149], [[object Arguments]: [object Object], b149, c149], [[object Arguments]: [object Object], b149, c149], [[object Arguments]: [object Object], b149, c149], [[object Arguments]: ], [[object Arguments]: [object Object], b149, c149], [[object Arguments]: [object Object], b149, c149], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b150, c150], [[object Arguments]: [object Object], b150, c150], [[object Arguments]: [object Object], b150, c150], [[object Arguments]: [object Object], b150, c150], [[object Arguments]: [object Object], b150, c150], [[object Arguments]: ], [[object Arguments]: [object Object], b150, c150], [[object Arguments]: [object Object], b150, c150], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b151, c151], [[object Arguments]: [object Object], b151, c151], [[object Arguments]: [object Object], b151, c151], [[object Arguments]: [object Object], b151, c151], [[object Arguments]: [object Object], b151, c151], [[object Arguments]: ], [[object Arguments]: [object Object], b151, c151], [[object Arguments]: [object Object], b151, c151], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b152, c152], [[object Arguments]: [object Object], b152, c152], [[object Arguments]: [object Object], b152, c152], [[object Arguments]: [object Object], b152, c152], [[object Arguments]: [object Object], b152, c152], [[object Arguments]: ], [[object Arguments]: [object Object], b152, c152], [[object Arguments]: [object Object], b152, c152], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b153, c153], [[object Arguments]: [object Object], b153, c153], [[object Arguments]: [object Object], b153, c153], [[object Arguments]: [object Object], b153, c153], [[object Arguments]: [object Object], b153, c153], [[object Arguments]: ], [[object Arguments]: [object Object], b153, c153], [[object Arguments]: [object Object], b153, c153], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b154, c154], [[object Arguments]: [object Object], b154, c154], [[object Arguments]: [object Object], b154, c154], [[object Arguments]: [object Object], b154, c154], [[object Arguments]: [object Object], b154, c154], [[object Arguments]: ], [[object Arguments]: [object Object], b154, c154], [[object Arguments]: [object Object], b154, c154], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b155, c155], [[object Arguments]: [object Object], b155, c155], [[object Arguments]: [object Object], b155, c155], [[object Arguments]: [object Object], b155, c155], [[object Arguments]: [object Object], b155, c155], [[object Arguments]: ], [[object Arguments]: [object Object], b155, c155], [[object Arguments]: [object Object], b155, c155], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b156, c156], [[object Arguments]: [object Object], b156, c156], [[object Arguments]: [object Object], b156, c156], [[object Arguments]: [object Object], b156, c156], [[object Arguments]: [object Object], b156, c156], [[object Arguments]: ], [[object Arguments]: [object Object], b156, c156], [[object Arguments]: [object Object], b156, c156], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b157, c157], [[object Arguments]: [object Object], b157, c157], [[object Arguments]: [object Object], b157, c157], [[object Arguments]: [object Object], b157, c157], [[object Arguments]: [object Object], b157, c157], [[object Arguments]: ], [[object Arguments]: [object Object], b157, c157], [[object Arguments]: [object Object], b157, c157], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b158, c158], [[object Arguments]: [object Object], b158, c158], [[object Arguments]: [object Object], b158, c158], [[object Arguments]: [object Object], b158, c158], [[object Arguments]: [object Object], b158, c158], [[object Arguments]: ], [[object Arguments]: [object Object], b158, c158], [[object Arguments]: [object Object], b158, c158], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b159, c159], [[object Arguments]: [object Object], b159, c159], [[object Arguments]: [object Object], b159, c159], [[object Arguments]: [object Object], b159, c159], [[object Arguments]: [object Object], b159, c159], [[object Arguments]: ], [[object Arguments]: [object Object], b159, c159], [[object Arguments]: [object Object], b159, c159], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b160, c160], [[object Arguments]: [object Object], b160, c160], [[object Arguments]: [object Object], b160, c160], [[object Arguments]: [object Object], b160, c160], [[object Arguments]: [object Object], b160, c160], [[object Arguments]: ], [[object Arguments]: [object Object], b160, c160], [[object Arguments]: [object Object], b160, c160], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b161, c161], [[object Arguments]: [object Object], b161, c161], [[object Arguments]: [object Object], b161, c161], [[object Arguments]: [object Object], b161, c161], [[object Arguments]: [object Object], b161, c161], [[object Arguments]: ], [[object Arguments]: [object Object], b161, c161], [[object Arguments]: [object Object], b161, c161], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b162, c162], [[object Arguments]: [object Object], b162, c162], [[object Arguments]: [object Object], b162, c162], [[object Arguments]: [object Object], b162, c162], [[object Arguments]: [object Object], b162, c162], [[object Arguments]: ], [[object Arguments]: [object Object], b162, c162], [[object Arguments]: [object Object], b162, c162], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b163, c163], [[object Arguments]: [object Object], b163, c163], [[object Arguments]: [object Object], b163, c163], [[object Arguments]: [object Object], b163, c163], [[object Arguments]: [object Object], b163, c163], [[object Arguments]: ], [[object Arguments]: [object Object], b163, c163], [[object Arguments]: [object Object], b163, c163], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b164, c164], [[object Arguments]: [object Object], b164, c164], [[object Arguments]: [object Object], b164, c164], [[object Arguments]: [object Object], b164, c164], [[object Arguments]: [object Object], b164, c164], [[object Arguments]: ], [[object Arguments]: [object Object], b164, c164], [[object Arguments]: [object Object], b164, c164], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b165, c165], [[object Arguments]: [object Object], b165, c165], [[object Arguments]: [object Object], b165, c165], [[object Arguments]: [object Object], b165, c165], [[object Arguments]: [object Object], b165, c165], [[object Arguments]: ], [[object Arguments]: [object Object], b165, c165], [[object Arguments]: [object Object], b165, c165], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b166, c166], [[object Arguments]: [object Object], b166, c166], [[object Arguments]: [object Object], b166, c166], [[object Arguments]: [object Object], b166, c166], [[object Arguments]: [object Object], b166, c166], [[object Arguments]: ], [[object Arguments]: [object Object], b166, c166], [[object Arguments]: [object Object], b166, c166], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b167, c167], [[object Arguments]: [object Object], b167, c167], [[object Arguments]: [object Object], b167, c167], [[object Arguments]: [object Object], b167, c167], [[object Arguments]: [object Object], b167, c167], [[object Arguments]: ], [[object Arguments]: [object Object], b167, c167], [[object Arguments]: [object Object], b167, c167], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b168, c168], [[object Arguments]: [object Object], b168, c168], [[object Arguments]: [object Object], b168, c168], [[object Arguments]: [object Object], b168, c168], [[object Arguments]: [object Object], b168, c168], [[object Arguments]: ], [[object Arguments]: [object Object], b168, c168], [[object Arguments]: [object Object], b168, c168], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b169, c169], [[object Arguments]: [object Object], b169, c169], [[object Arguments]: [object Object], b169, c169], [[object Arguments]: [object Object], b169, c169], [[object Arguments]: [object Object], b169, c169], [[object Arguments]: ], [[object Arguments]: [object Object], b169, c169], [[object Arguments]: [object Object], b169, c169], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b170, c170], [[object Arguments]: [object Object], b170, c170], [[object Arguments]: [object Object], b170, c170], [[object Arguments]: [object Object], b170, c170], [[object Arguments]: [object Object], b170, c170], [[object Arguments]: ], [[object Arguments]: [object Object], b170, c170], [[object Arguments]: [object Object], b170, c170], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b171, c171], [[object Arguments]: [object Object], b171, c171], [[object Arguments]: [object Object], b171, c171], [[object Arguments]: [object Object], b171, c171], [[object Arguments]: [object Object], b171, c171], [[object Arguments]: ], [[object Arguments]: [object Object], b171, c171], [[object Arguments]: [object Object], b171, c171], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b172, c172], [[object Arguments]: [object Object], b172, c172], [[object Arguments]: [object Object], b172, c172], [[object Arguments]: [object Object], b172, c172], [[object Arguments]: [object Object], b172, c172], [[object Arguments]: ], [[object Arguments]: [object Object], b172, c172], [[object Arguments]: [object Object], b172, c172], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b173, c173], [[object Arguments]: [object Object], b173, c173], [[object Arguments]: [object Object], b173, c173], [[object Arguments]: [object Object], b173, c173], [[object Arguments]: [object Object], b173, c173], [[object Arguments]: ], [[object Arguments]: [object Object], b173, c173], [[object Arguments]: [object Object], b173, c173], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b174, c174], [[object Arguments]: [object Object], b174, c174], [[object Arguments]: [object Object], b174, c174], [[object Arguments]: [object Object], b174, c174], [[object Arguments]: [object Object], b174, c174], [[object Arguments]: ], [[object Arguments]: [object Object], b174, c174], [[object Arguments]: [object Object], b174, c174], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b175, c175], [[object Arguments]: [object Object], b175, c175], [[object Arguments]: [object Object], b175, c175], [[object Arguments]: [object Object], b175, c175], [[object Arguments]: [object Object], b175, c175], [[object Arguments]: ], [[object Arguments]: [object Object], b175, c175], [[object Arguments]: [object Object], b175, c175], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b176, c176], [[object Arguments]: [object Object], b176, c176], [[object Arguments]: [object Object], b176, c176], [[object Arguments]: [object Object], b176, c176], [[object Arguments]: [object Object], b176, c176], [[object Arguments]: ], [[object Arguments]: [object Object], b176, c176], [[object Arguments]: [object Object], b176, c176], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b177, c177], [[object Arguments]: [object Object], b177, c177], [[object Arguments]: [object Object], b177, c177], [[object Arguments]: [object Object], b177, c177], [[object Arguments]: [object Object], b177, c177], [[object Arguments]: ], [[object Arguments]: [object Object], b177, c177], [[object Arguments]: [object Object], b177, c177], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b178, c178], [[object Arguments]: [object Object], b178, c178], [[object Arguments]: [object Object], b178, c178], [[object Arguments]: [object Object], b178, c178], [[object Arguments]: [object Object], b178, c178], [[object Arguments]: ], [[object Arguments]: [object Object], b178, c178], [[object Arguments]: [object Object], b178, c178], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b179, c179], [[object Arguments]: [object Object], b179, c179], [[object Arguments]: [object Object], b179, c179], [[object Arguments]: [object Object], b179, c179], [[object Arguments]: [object Object], b179, c179], [[object Arguments]: ], [[object Arguments]: [object Object], b179, c179], [[object Arguments]: [object Object], b179, c179], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b180, c180], [[object Arguments]: [object Object], b180, c180], [[object Arguments]: [object Object], b180, c180], [[object Arguments]: [object Object], b180, c180], [[object Arguments]: [object Object], b180, c180], [[object Arguments]: ], [[object Arguments]: [object Object], b180, c180], [[object Arguments]: [object Object], b180, c180], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b181, c181], [[object Arguments]: [object Object], b181, c181], [[object Arguments]: [object Object], b181, c181], [[object Arguments]: [object Object], b181, c181], [[object Arguments]: [object Object], b181, c181], [[object Arguments]: ], [[object Arguments]: [object Object], b181, c181], [[object Arguments]: [object Object], b181, c181], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b182, c182], [[object Arguments]: [object Object], b182, c182], [[object Arguments]: [object Object], b182, c182], [[object Arguments]: [object Object], b182, c182], [[object Arguments]: [object Object], b182, c182], [[object Arguments]: ], [[object Arguments]: [object Object], b182, c182], [[object Arguments]: [object Object], b182, c182], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b183, c183], [[object Arguments]: [object Object], b183, c183], [[object Arguments]: [object Object], b183, c183], [[object Arguments]: [object Object], b183, c183], [[object Arguments]: [object Object], b183, c183], [[object Arguments]: ], [[object Arguments]: [object Object], b183, c183], [[object Arguments]: [object Object], b183, c183], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b184, c184], [[object Arguments]: [object Object], b184, c184], [[object Arguments]: [object Object], b184, c184], [[object Arguments]: [object Object], b184, c184], [[object Arguments]: [object Object], b184, c184], [[object Arguments]: ], [[object Arguments]: [object Object], b184, c184], [[object Arguments]: [object Object], b184, c184], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b185, c185], [[object Arguments]: [object Object], b185, c185], [[object Arguments]: [object Object], b185, c185], [[object Arguments]: [object Object], b185, c185], [[object Arguments]: [object Object], b185, c185], [[object Arguments]: ], [[object Arguments]: [object Object], b185, c185], [[object Arguments]: [object Object], b185, c185], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b186, c186], [[object Arguments]: [object Object], b186, c186], [[object Arguments]: [object Object], b186, c186], [[object Arguments]: [object Object], b186, c186], [[object Arguments]: [object Object], b186, c186], [[object Arguments]: ], [[object Arguments]: [object Object], b186, c186], [[object Arguments]: [object Object], b186, c186], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b187, c187], [[object Arguments]: [object Object], b187, c187], [[object Arguments]: [object Object], b187, c187], [[object Arguments]: [object Object], b187, c187], [[object Arguments]: [object Object], b187, c187], [[object Arguments]: ], [[object Arguments]: [object Object], b187, c187], [[object Arguments]: [object Object], b187, c187], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b188, c188], [[object Arguments]: [object Object], b188, c188], [[object Arguments]: [object Object], b188, c188], [[object Arguments]: [object Object], b188, c188], [[object Arguments]: [object Object], b188, c188], [[object Arguments]: ], [[object Arguments]: [object Object], b188, c188], [[object Arguments]: [object Object], b188, c188], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b189, c189], [[object Arguments]: [object Object], b189, c189], [[object Arguments]: [object Object], b189, c189], [[object Arguments]: [object Object], b189, c189], [[object Arguments]: [object Object], b189, c189], [[object Arguments]: ], [[object Arguments]: [object Object], b189, c189], [[object Arguments]: [object Object], b189, c189], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b190, c190], [[object Arguments]: [object Object], b190, c190], [[object Arguments]: [object Object], b190, c190], [[object Arguments]: [object Object], b190, c190], [[object Arguments]: [object Object], b190, c190], [[object Arguments]: ], [[object Arguments]: [object Object], b190, c190], [[object Arguments]: [object Object], b190, c190], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b191, c191], [[object Arguments]: [object Object], b191, c191], [[object Arguments]: [object Object], b191, c191], [[object Arguments]: [object Object], b191, c191], [[object Arguments]: [object Object], b191, c191], [[object Arguments]: ], [[object Arguments]: [object Object], b191, c191], [[object Arguments]: [object Object], b191, c191], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b192, c192], [[object Arguments]: [object Object], b192, c192], [[object Arguments]: [object Object], b192, c192], [[object Arguments]: [object Object], b192, c192], [[object Arguments]: [object Object], b192, c192], [[object Arguments]: ], [[object Arguments]: [object Object], b192, c192], [[object Arguments]: [object Object], b192, c192], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b193, c193], [[object Arguments]: [object Object], b193, c193], [[object Arguments]: [object Object], b193, c193], [[object Arguments]: [object Object], b193, c193], [[object Arguments]: [object Object], b193, c193], [[object Arguments]: ], [[object Arguments]: [object Object], b193, c193], [[object Arguments]: [object Object], b193, c193], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b194, c194], [[object Arguments]: [object Object], b194, c194], [[object Arguments]: [object Object], b194, c194], [[object Arguments]: [object Object], b194, c194], [[object Arguments]: [object Object], b194, c194], [[object Arguments]: ], [[object Arguments]: [object Object], b194, c194], [[object Arguments]: [object Object], b194, c194], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b195, c195], [[object Arguments]: [object Object], b195, c195], [[object Arguments]: [object Object], b195, c195], [[object Arguments]: [object Object], b195, c195], [[object Arguments]: [object Object], b195, c195], [[object Arguments]: ], [[object Arguments]: [object Object], b195, c195], [[object Arguments]: [object Object], b195, c195], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b196, c196], [[object Arguments]: [object Object], b196, c196], [[object Arguments]: [object Object], b196, c196], [[object Arguments]: [object Object], b196, c196], [[object Arguments]: [object Object], b196, c196], [[object Arguments]: ], [[object Arguments]: [object Object], b196, c196], [[object Arguments]: [object Object], b196, c196], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b197, c197], [[object Arguments]: [object Object], b197, c197], [[object Arguments]: [object Object], b197, c197], [[object Arguments]: [object Object], b197, c197], [[object Arguments]: [object Object], b197, c197], [[object Arguments]: ], [[object Arguments]: [object Object], b197, c197], [[object Arguments]: [object Object], b197, c197], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b198, c198], [[object Arguments]: [object Object], b198, c198], [[object Arguments]: [object Object], b198, c198], [[object Arguments]: [object Object], b198, c198], [[object Arguments]: [object Object], b198, c198], [[object Arguments]: ], [[object Arguments]: [object Object], b198, c198], [[object Arguments]: [object Object], b198, c198], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: [[object Arguments]: [object Object], b199, c199], [[object Arguments]: [object Object], b199, c199], [[object Arguments]: [object Object], b199, c199], [[object Arguments]: [object Object], b199, c199], [[object Arguments]: [object Object], b199, c199], [[object Arguments]: ], [[object Arguments]: [object Object], b199, c199], [[object Arguments]: [object Object], b199, c199], [[object Arguments]: ], [[object Arguments]: 42, 56]]"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-arguments-use-from-all-the-places.js b/test/webkit/dfg-inline-arguments-use-from-all-the-places.js
new file mode 100644 (file)
index 0000000..4470d9c
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves basic function.arguments functionality when said functionality is used from inside and outside getters and from inlined code, all at once."
+);
+
+function foo(o,b,c) {
+    return [foo.arguments, bar.arguments].concat(o.f);
+}
+
+function fuzz(a, b) {
+    return [foo.arguments, bar.arguments, getter.arguments, fuzz.arguments];
+}
+
+function getter() {
+    return [foo.arguments, bar.arguments, getter.arguments].concat(fuzz(42, 56));
+}
+
+o = {}
+o.__defineGetter__("f", getter);
+
+function bar(o,b,c) {
+    return [bar.arguments].concat(foo(o,b,c));
+}
+
+function argsToStr(args) {
+    if (args.length === void 0 || args.charAt !== void 0)
+        return "" + args
+    var str = "[" + args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += argsToStr(args[i]);
+    }
+    return str + "]";
+}
+
+for (var __i = 0; __i < 200; ++__i) {
+    var text1 = "[[object Arguments]: [object Object], b" + __i + ", c" + __i + "]";
+    var text2 = "[[object Arguments]: ]";
+    var text3 = "[[object Arguments]: 42, 56]";
+    shouldBe("argsToStr(bar(o, \"b\" + __i, \"c\" + __i))", "\"[[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments],[object Arguments]: " + text1 + ", " + text1 + ", " + text1 + ", " + text1 + ", " + text1 + ", " + text2 + ", " + text1 + ", " + text1 + ", " + text2 + ", " + text3 + "]\"");
+}
+
diff --git a/test/webkit/dfg-inline-arguments-use-from-getter-expected.txt b/test/webkit/dfg-inline-arguments-use-from-getter-expected.txt
new file mode 100644 (file)
index 0000000..6aa6ba2
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves basic function.arguments functionality when said functionality is used from a getter.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b0, c0"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b1, c1"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b2, c2"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b3, c3"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b4, c4"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b5, c5"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b6, c6"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b7, c7"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b8, c8"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b9, c9"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b10, c10"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b11, c11"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b12, c12"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b13, c13"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b14, c14"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b15, c15"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b16, c16"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b17, c17"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b18, c18"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b19, c19"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b20, c20"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b21, c21"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b22, c22"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b23, c23"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b24, c24"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b25, c25"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b26, c26"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b27, c27"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b28, c28"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b29, c29"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b30, c30"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b31, c31"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b32, c32"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b33, c33"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b34, c34"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b35, c35"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b36, c36"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b37, c37"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b38, c38"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b39, c39"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b40, c40"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b41, c41"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b42, c42"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b43, c43"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b44, c44"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b45, c45"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b46, c46"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b47, c47"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b48, c48"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b49, c49"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b50, c50"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b51, c51"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b52, c52"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b53, c53"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b54, c54"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b55, c55"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b56, c56"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b57, c57"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b58, c58"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b59, c59"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b60, c60"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b61, c61"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b62, c62"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b63, c63"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b64, c64"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b65, c65"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b66, c66"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b67, c67"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b68, c68"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b69, c69"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b70, c70"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b71, c71"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b72, c72"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b73, c73"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b74, c74"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b75, c75"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b76, c76"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b77, c77"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b78, c78"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b79, c79"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b80, c80"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b81, c81"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b82, c82"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b83, c83"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b84, c84"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b85, c85"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b86, c86"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b87, c87"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b88, c88"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b89, c89"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b90, c90"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b91, c91"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b92, c92"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b93, c93"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b94, c94"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b95, c95"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b96, c96"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b97, c97"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b98, c98"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b99, c99"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b100, c100"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b101, c101"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b102, c102"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b103, c103"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b104, c104"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b105, c105"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b106, c106"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b107, c107"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b108, c108"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b109, c109"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b110, c110"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b111, c111"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b112, c112"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b113, c113"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b114, c114"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b115, c115"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b116, c116"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b117, c117"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b118, c118"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b119, c119"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b120, c120"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b121, c121"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b122, c122"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b123, c123"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b124, c124"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b125, c125"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b126, c126"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b127, c127"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b128, c128"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b129, c129"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b130, c130"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b131, c131"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b132, c132"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b133, c133"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b134, c134"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b135, c135"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b136, c136"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b137, c137"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b138, c138"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b139, c139"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b140, c140"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b141, c141"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b142, c142"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b143, c143"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b144, c144"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b145, c145"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b146, c146"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b147, c147"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b148, c148"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b149, c149"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b150, c150"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b151, c151"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b152, c152"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b153, c153"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b154, c154"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b155, c155"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b156, c156"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b157, c157"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b158, c158"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b159, c159"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b160, c160"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b161, c161"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b162, c162"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b163, c163"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b164, c164"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b165, c165"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b166, c166"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b167, c167"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b168, c168"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b169, c169"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b170, c170"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b171, c171"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b172, c172"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b173, c173"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b174, c174"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b175, c175"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b176, c176"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b177, c177"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b178, c178"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b179, c179"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b180, c180"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b181, c181"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b182, c182"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b183, c183"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b184, c184"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b185, c185"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b186, c186"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b187, c187"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b188, c188"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b189, c189"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b190, c190"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b191, c191"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b192, c192"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b193, c193"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b194, c194"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b195, c195"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b196, c196"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b197, c197"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b198, c198"
+PASS argsToStr(bar(o, "b" + __i, "c" + __i)) is "[object Arguments]: [object Object], b199, c199"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-arguments-use-from-getter.js b/test/webkit/dfg-inline-arguments-use-from-getter.js
new file mode 100644 (file)
index 0000000..f532d35
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves basic function.arguments functionality when said functionality is used from a getter."
+);
+
+function foo(o,b,c) {
+    return o.f;
+}
+
+o = {}
+o.__defineGetter__("f", function(){ return foo.arguments; });
+
+function bar(o,b,c) {
+    return foo(o,b,c);
+}
+
+function argsToStr(args) {
+    var str = args + ": ";
+    for (var i = 0; i < args.length; ++i) {
+        if (i)
+            str += ", ";
+        str += args[i];
+    }
+    return str;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("argsToStr(bar(o, \"b\" + __i, \"c\" + __i))", "\"[object Arguments]: [object Object], b" + __i + ", c" + __i + "\"");
+
diff --git a/test/webkit/dfg-inline-arguments-use-from-uninlined-code-expected.txt b/test/webkit/dfg-inline-arguments-use-from-uninlined-code-expected.txt
new file mode 100644 (file)
index 0000000..3508a08
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining preserves basic function.arguments functionality when said functionality is used from outside of the code where inlining actually happened.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a0,b1,c2,a0,b1,c2"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a1,b2,c3,a1,b2,c3"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a2,b3,c4,a2,b3,c4"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a3,b4,c5,a3,b4,c5"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a4,b5,c6,a4,b5,c6"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a5,b6,c7,a5,b6,c7"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a6,b7,c8,a6,b7,c8"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a7,b8,c9,a7,b8,c9"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a8,b9,c10,a8,b9,c10"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a9,b10,c11,a9,b10,c11"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a10,b11,c12,a10,b11,c12"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a11,b12,c13,a11,b12,c13"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a12,b13,c14,a12,b13,c14"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a13,b14,c15,a13,b14,c15"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a14,b15,c16,a14,b15,c16"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a15,b16,c17,a15,b16,c17"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a16,b17,c18,a16,b17,c18"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a17,b18,c19,a17,b18,c19"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a18,b19,c20,a18,b19,c20"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a19,b20,c21,a19,b20,c21"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a20,b21,c22,a20,b21,c22"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a21,b22,c23,a21,b22,c23"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a22,b23,c24,a22,b23,c24"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a23,b24,c25,a23,b24,c25"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a24,b25,c26,a24,b25,c26"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a25,b26,c27,a25,b26,c27"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a26,b27,c28,a26,b27,c28"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a27,b28,c29,a27,b28,c29"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a28,b29,c30,a28,b29,c30"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a29,b30,c31,a29,b30,c31"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a30,b31,c32,a30,b31,c32"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a31,b32,c33,a31,b32,c33"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a32,b33,c34,a32,b33,c34"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a33,b34,c35,a33,b34,c35"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a34,b35,c36,a34,b35,c36"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a35,b36,c37,a35,b36,c37"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a36,b37,c38,a36,b37,c38"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a37,b38,c39,a37,b38,c39"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a38,b39,c40,a38,b39,c40"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a39,b40,c41,a39,b40,c41"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a40,b41,c42,a40,b41,c42"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a41,b42,c43,a41,b42,c43"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a42,b43,c44,a42,b43,c44"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a43,b44,c45,a43,b44,c45"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a44,b45,c46,a44,b45,c46"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a45,b46,c47,a45,b46,c47"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a46,b47,c48,a46,b47,c48"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a47,b48,c49,a47,b48,c49"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a48,b49,c50,a48,b49,c50"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a49,b50,c51,a49,b50,c51"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a50,b51,c52,a50,b51,c52"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a51,b52,c53,a51,b52,c53"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a52,b53,c54,a52,b53,c54"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a53,b54,c55,a53,b54,c55"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a54,b55,c56,a54,b55,c56"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a55,b56,c57,a55,b56,c57"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a56,b57,c58,a56,b57,c58"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a57,b58,c59,a57,b58,c59"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a58,b59,c60,a58,b59,c60"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a59,b60,c61,a59,b60,c61"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a60,b61,c62,a60,b61,c62"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a61,b62,c63,a61,b62,c63"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a62,b63,c64,a62,b63,c64"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a63,b64,c65,a63,b64,c65"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a64,b65,c66,a64,b65,c66"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a65,b66,c67,a65,b66,c67"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a66,b67,c68,a66,b67,c68"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a67,b68,c69,a67,b68,c69"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a68,b69,c70,a68,b69,c70"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a69,b70,c71,a69,b70,c71"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a70,b71,c72,a70,b71,c72"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a71,b72,c73,a71,b72,c73"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a72,b73,c74,a72,b73,c74"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a73,b74,c75,a73,b74,c75"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a74,b75,c76,a74,b75,c76"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a75,b76,c77,a75,b76,c77"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a76,b77,c78,a76,b77,c78"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a77,b78,c79,a77,b78,c79"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a78,b79,c80,a78,b79,c80"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a79,b80,c81,a79,b80,c81"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a80,b81,c82,a80,b81,c82"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a81,b82,c83,a81,b82,c83"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a82,b83,c84,a82,b83,c84"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a83,b84,c85,a83,b84,c85"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a84,b85,c86,a84,b85,c86"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a85,b86,c87,a85,b86,c87"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a86,b87,c88,a86,b87,c88"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a87,b88,c89,a87,b88,c89"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a88,b89,c90,a88,b89,c90"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a89,b90,c91,a89,b90,c91"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a90,b91,c92,a90,b91,c92"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a91,b92,c93,a91,b92,c93"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a92,b93,c94,a92,b93,c94"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a93,b94,c95,a93,b94,c95"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a94,b95,c96,a94,b95,c96"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a95,b96,c97,a95,b96,c97"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a96,b97,c98,a96,b97,c98"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a97,b98,c99,a97,b98,c99"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a98,b99,c100,a98,b99,c100"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a99,b100,c101,a99,b100,c101"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a100,b101,c102,a100,b101,c102"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a101,b102,c103,a101,b102,c103"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a102,b103,c104,a102,b103,c104"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a103,b104,c105,a103,b104,c105"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a104,b105,c106,a104,b105,c106"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a105,b106,c107,a105,b106,c107"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a106,b107,c108,a106,b107,c108"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a107,b108,c109,a107,b108,c109"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a108,b109,c110,a108,b109,c110"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a109,b110,c111,a109,b110,c111"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a110,b111,c112,a110,b111,c112"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a111,b112,c113,a111,b112,c113"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a112,b113,c114,a112,b113,c114"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a113,b114,c115,a113,b114,c115"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a114,b115,c116,a114,b115,c116"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a115,b116,c117,a115,b116,c117"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a116,b117,c118,a116,b117,c118"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a117,b118,c119,a117,b118,c119"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a118,b119,c120,a118,b119,c120"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a119,b120,c121,a119,b120,c121"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a120,b121,c122,a120,b121,c122"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a121,b122,c123,a121,b122,c123"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a122,b123,c124,a122,b123,c124"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a123,b124,c125,a123,b124,c125"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a124,b125,c126,a124,b125,c126"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a125,b126,c127,a125,b126,c127"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a126,b127,c128,a126,b127,c128"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a127,b128,c129,a127,b128,c129"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a128,b129,c130,a128,b129,c130"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a129,b130,c131,a129,b130,c131"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a130,b131,c132,a130,b131,c132"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a131,b132,c133,a131,b132,c133"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a132,b133,c134,a132,b133,c134"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a133,b134,c135,a133,b134,c135"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a134,b135,c136,a134,b135,c136"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a135,b136,c137,a135,b136,c137"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a136,b137,c138,a136,b137,c138"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a137,b138,c139,a137,b138,c139"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a138,b139,c140,a138,b139,c140"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a139,b140,c141,a139,b140,c141"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a140,b141,c142,a140,b141,c142"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a141,b142,c143,a141,b142,c143"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a142,b143,c144,a142,b143,c144"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a143,b144,c145,a143,b144,c145"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a144,b145,c146,a144,b145,c146"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a145,b146,c147,a145,b146,c147"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a146,b147,c148,a146,b147,c148"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a147,b148,c149,a147,b148,c149"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a148,b149,c150,a148,b149,c150"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a149,b150,c151,a149,b150,c151"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a150,b151,c152,a150,b151,c152"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a151,b152,c153,a151,b152,c153"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a152,b153,c154,a152,b153,c154"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a153,b154,c155,a153,b154,c155"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a154,b155,c156,a154,b155,c156"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a155,b156,c157,a155,b156,c157"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a156,b157,c158,a156,b157,c158"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a157,b158,c159,a157,b158,c159"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a158,b159,c160,a158,b159,c160"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a159,b160,c161,a159,b160,c161"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a160,b161,c162,a160,b161,c162"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a161,b162,c163,a161,b162,c163"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a162,b163,c164,a162,b163,c164"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a163,b164,c165,a163,b164,c165"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a164,b165,c166,a164,b165,c166"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a165,b166,c167,a165,b166,c167"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a166,b167,c168,a166,b167,c168"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a167,b168,c169,a167,b168,c169"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a168,b169,c170,a168,b169,c170"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a169,b170,c171,a169,b170,c171"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a170,b171,c172,a170,b171,c172"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a171,b172,c173,a171,b172,c173"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a172,b173,c174,a172,b173,c174"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a173,b174,c175,a173,b174,c175"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a174,b175,c176,a174,b175,c176"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a175,b176,c177,a175,b176,c177"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a176,b177,c178,a176,b177,c178"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a177,b178,c179,a177,b178,c179"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a178,b179,c180,a178,b179,c180"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a179,b180,c181,a179,b180,c181"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a180,b181,c182,a180,b181,c182"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a181,b182,c183,a181,b182,c183"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a182,b183,c184,a182,b183,c184"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a183,b184,c185,a183,b184,c185"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a184,b185,c186,a184,b185,c186"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a185,b186,c187,a185,b186,c187"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a186,b187,c188,a186,b187,c188"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a187,b188,c189,a187,b188,c189"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a188,b189,c190,a188,b189,c190"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a189,b190,c191,a189,b190,c191"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a190,b191,c192,a190,b191,c192"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a191,b192,c193,a191,b192,c193"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a192,b193,c194,a192,b193,c194"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a193,b194,c195,a193,b194,c195"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a194,b195,c196,a194,b195,c196"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a195,b196,c197,a195,b196,c197"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a196,b197,c198,a196,b197,c198"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a197,b198,c199,a197,b198,c199"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a198,b199,c200,a198,b199,c200"
+PASS "" + baz("a" + __i, "b" + (__i + 1), "c" + (__i + 2)) is "a199,b200,c201,a199,b200,c201"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-arguments-use-from-uninlined-code.js b/test/webkit/dfg-inline-arguments-use-from-uninlined-code.js
new file mode 100644 (file)
index 0000000..aca6127
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining preserves basic function.arguments functionality when said functionality is used from outside of the code where inlining actually happened."
+);
+
+function foo() {
+    return bar.arguments;
+}
+
+function fuzz() {
+    return baz.arguments;
+}
+
+function bar(a,b,c) {
+    return foo(a,b,c);
+}
+
+function baz(a,b,c) {
+    var array1 = bar(a,b,c);
+    var array2 = fuzz(a,b,c);
+    var result = [];
+    for (var i = 0; i < array1.length; ++i)
+        result.push(array1[i]);
+    for (var i = 0; i < array2.length; ++i)
+        result.push(array2[i]);
+    return result;
+}
+
+for (var __i = 0; __i < 200; ++__i)
+    shouldBe("\"\" + baz(\"a\" + __i, \"b\" + (__i + 1), \"c\" + (__i + 2))",
+             "\"a" + __i + ",b" + (__i + 1) + ",c" + (__i + 2) + ",a" + __i + ",b" + (__i + 1) + ",c" + (__i + 2) + "\"");
+
+var successfullyParsed = true;
diff --git a/test/webkit/dfg-inline-constant-expected.txt b/test/webkit/dfg-inline-constant-expected.txt
new file mode 100644 (file)
index 0000000..18150fe
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that function inlining in the DFG JIT doesn't get confused by constants being reused between inliner and inlinee.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar(6, 0) is 10
+PASS bar(6, 1) is 15
+PASS bar(6, false) is 10
+PASS bar(6, true) is 15
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-constant.js b/test/webkit/dfg-inline-constant.js
new file mode 100644 (file)
index 0000000..8c7f7eb
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that function inlining in the DFG JIT doesn't get confused by constants being reused between inliner and inlinee."
+);
+
+function foo(a, b) {
+    if (b)
+        return a + 4;
+    return b + 5;
+}
+
+function bar(a, b) {
+    return foo(a, b) + 5;
+}
+
+for (var i = 0; i < 1000; ++i)
+    bar(i, i + 1);
+
+shouldBe("bar(6, 0)", "10");
+shouldBe("bar(6, 1)", "15");
+shouldBe("bar(6, false)", "10");
+shouldBe("bar(6, true)", "15");
diff --git a/test/webkit/dfg-inline-constructor-that-uses-arguments-expected.txt b/test/webkit/dfg-inline-constructor-that-uses-arguments-expected.txt
new file mode 100644 (file)
index 0000000..14b249a
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we can inline a constructor that uses arguments without failing DFG validation.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS bar().x is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-constructor-that-uses-arguments.js b/test/webkit/dfg-inline-constructor-that-uses-arguments.js
new file mode 100644 (file)
index 0000000..0a2862f
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we can inline a constructor that uses arguments without failing DFG validation."
+);
+
+function Foo() {
+    this.x = arguments[0];
+}
+
+function bar() {
+    return new Foo(42);
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("bar().x", "42");
diff --git a/test/webkit/dfg-inline-early-return-expected.txt b/test/webkit/dfg-inline-early-return-expected.txt
new file mode 100644 (file)
index 0000000..4b12ab2
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that an early return in the first basic block does not crash the DFG's bytecode parser whilst inlining.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(42) is 42
+PASS bar(42) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-early-return.js b/test/webkit/dfg-inline-early-return.js
new file mode 100644 (file)
index 0000000..986a7ec
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that an early return in the first basic block does not crash the DFG's bytecode parser whilst inlining."
+);
+
+function foo(a) {
+    {
+        return a;
+    }
+}
+
+function bar(a) {
+    return foo(a);
+}
+
+for (var i = 0; i < 100; ++i)
+    bar(i);
+
+shouldBe("foo(42)", "42");
+shouldBe("bar(42)", "42");
+
+var successfullyParsed = true;
diff --git a/test/webkit/dfg-inline-function-dot-caller-expected.txt b/test/webkit/dfg-inline-function-dot-caller-expected.txt
new file mode 100644 (file)
index 0000000..8ad5014
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that DFG inlining does not brak function.arguments.caller.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS resultArray.length is 4
+PASS resultArray[3] is "g"
+PASS resultArray[2] is "makeInlinableCall"
+PASS resultArray[1] is "inlineable"
+PASS resultArray[0] is "nonInlineable"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-function-dot-caller.js b/test/webkit/dfg-inline-function-dot-caller.js
new file mode 100644 (file)
index 0000000..c6dd2b2
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that DFG inlining does not brak function.arguments.caller."
+);
+
+var callCount = 0;
+
+var resultArray = []
+
+function throwError() {
+   throw {};
+}
+var object = {
+   nonInlineable : function nonInlineable() {
+       if (0) return [arguments, function(){}];
+       if (++callCount == 999999) {
+           var f = nonInlineable;
+           while (f) {
+               resultArray.push(f.name);
+               f=f.arguments.callee.caller;
+           }
+       }
+   },
+   inlineable : function inlineable() {
+       this.nonInlineable();
+   }
+}
+function makeInlinableCall(o) {
+   for (var i = 0; i < 1000; i++)
+       o.inlineable();
+}
+
+function g() {
+    var j = 0;
+    for (var i = 0; i < 1000; i++) {
+        j++;
+        makeInlinableCall(object);
+    }
+}
+g();
+
+shouldBe("resultArray.length", "4");
+shouldBe("resultArray[3]", "\"g\"");
+shouldBe("resultArray[2]", "\"makeInlinableCall\"");
+shouldBe("resultArray[1]", "\"inlineable\"");
+shouldBe("resultArray[0]", "\"nonInlineable\"");
+
diff --git a/test/webkit/dfg-inline-new-array-buffer-expected.txt b/test/webkit/dfg-inline-new-array-buffer-expected.txt
new file mode 100644 (file)
index 0000000..fc2ec06
--- /dev/null
@@ -0,0 +1,72 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining correctly handles constant buffers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS bar()[0] is 1
+PASS bar()[1] is 2
+PASS bar()[2] is 3
+PASS bar()[3] is 4
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-new-array-buffer.js b/test/webkit/dfg-inline-new-array-buffer.js
new file mode 100644 (file)
index 0000000..c751f03
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining correctly handles constant buffers."
+);
+
+function foo() {
+    return [1, 2, 3, 4];
+}
+
+function bar() {
+    return foo();
+}
+
+for (var i = 0; i < 1000; ++i) {
+    bar();
+}
+
+for (var i = 0; i < 10; ++i) {
+    shouldBe("bar()[0]", "1")
+    shouldBe("bar()[1]", "2")
+    shouldBe("bar()[2]", "3")
+    shouldBe("bar()[3]", "4")
+}
+
+var successfullyParsed = true;
diff --git a/test/webkit/dfg-inline-unused-this-expected.txt b/test/webkit/dfg-inline-unused-this-expected.txt
new file mode 100644 (file)
index 0000000..eac21d0
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining a function that does not use this does not result in this being lost entirely.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS baz(object, 0, 0) is 0
+PASS baz(object, 1, 2) is 3
+PASS baz(object, 2, 4) is 6
+PASS baz(object, 3, 6) is 9
+PASS baz(object, 4, 8) is 12
+PASS baz(object, 5, 10) is 15
+PASS baz(object, 6, 12) is 18
+PASS baz(object, 7, 14) is 21
+PASS baz(object, 8, 16) is 24
+PASS baz(object, 9, 18) is 27
+PASS baz(object, 10, 20) is 30
+PASS baz(object, 11, 22) is 33
+PASS baz(object, 12, 24) is 36
+PASS baz(object, 13, 26) is 39
+PASS baz(object, 14, 28) is 42
+PASS baz(object, 15, 30) is 45
+PASS baz(object, 16, 32) is 48
+PASS baz(object, 17, 34) is 51
+PASS baz(object, 18, 36) is 54
+PASS baz(object, 19, 38) is 57
+PASS baz(object, 20, 40) is 60
+PASS baz(object, 21, 42) is 63
+PASS baz(object, 22, 44) is 66
+PASS baz(object, 23, 46) is 69
+PASS baz(object, 24, 48) is 72
+PASS baz(object, 25, 50) is 75
+PASS baz(object, 26, 52) is 78
+PASS baz(object, 27, 54) is 81
+PASS baz(object, 28, 56) is 84
+PASS baz(object, 29, 58) is 87
+PASS baz(object, 30, 60) is 90
+PASS baz(object, 31, 62) is 93
+PASS baz(object, 32, 64) is 96
+PASS baz(object, 33, 66) is 99
+PASS baz(object, 34, 68) is 102
+PASS baz(object, 35, 70) is 105
+PASS baz(object, 36, 72) is 108
+PASS baz(object, 37, 74) is 111
+PASS baz(object, 38, 76) is 114
+PASS baz(object, 39, 78) is 117
+PASS baz(object, 40, 80) is 120
+PASS baz(object, 41, 82) is 123
+PASS baz(object, 42, 84) is 126
+PASS baz(object, 43, 86) is 129
+PASS baz(object, 44, 88) is 132
+PASS baz(object, 45, 90) is 135
+PASS baz(object, 46, 92) is 138
+PASS baz(object, 47, 94) is 141
+PASS baz(object, 48, 96) is 144
+PASS baz(object, 49, 98) is 147
+PASS baz(object, 50, 100) is 150
+PASS baz(object, 51, 102) is 153
+PASS baz(object, 52, 104) is 156
+PASS baz(object, 53, 106) is 159
+PASS baz(object, 54, 108) is 162
+PASS baz(object, 55, 110) is 165
+PASS baz(object, 56, 112) is 168
+PASS baz(object, 57, 114) is 171
+PASS baz(object, 58, 116) is 174
+PASS baz(object, 59, 118) is 177
+PASS baz(object, 60, 120) is 180
+PASS baz(object, 61, 122) is 183
+PASS baz(object, 62, 124) is 186
+PASS baz(object, 63, 126) is 189
+PASS baz(object, 64, 128) is 192
+PASS baz(object, 65, 130) is 195
+PASS baz(object, 66, 132) is 198
+PASS baz(object, 67, 134) is 201
+PASS baz(object, 68, 136) is 204
+PASS baz(object, 69, 138) is 207
+PASS baz(object, 70, 140) is 210
+PASS baz(object, 71, 142) is 213
+PASS baz(object, 72, 144) is 216
+PASS baz(object, 73, 146) is 219
+PASS baz(object, 74, 148) is 222
+PASS baz(object, 75, 150) is 225
+PASS baz(object, 76, 152) is 228
+PASS baz(object, 77, 154) is 231
+PASS baz(object, 78, 156) is 234
+PASS baz(object, 79, 158) is 237
+PASS baz(object, 80, 160) is 240
+PASS baz(object, 81, 162) is 243
+PASS baz(object, 82, 164) is 246
+PASS baz(object, 83, 166) is 249
+PASS baz(object, 84, 168) is 252
+PASS baz(object, 85, 170) is 255
+PASS baz(object, 86, 172) is 258
+PASS baz(object, 87, 174) is 261
+PASS baz(object, 88, 176) is 264
+PASS baz(object, 89, 178) is 267
+PASS baz(object, 90, 180) is 270
+PASS baz(object, 91, 182) is 273
+PASS baz(object, 92, 184) is 276
+PASS baz(object, 93, 186) is 279
+PASS baz(object, 94, 188) is 282
+PASS baz(object, 95, 190) is 285
+PASS baz(object, 96, 192) is 288
+PASS baz(object, 97, 194) is 291
+PASS baz(object, 98, 196) is 294
+PASS baz(object, 99, 198) is 297
+PASS baz(object, 100, 200) is 300
+PASS baz(object, 101, 202) is 303
+PASS baz(object, 102, 204) is 306
+PASS baz(object, 103, 206) is 309
+PASS baz(object, 104, 208) is 312
+PASS baz(object, 105, 210) is 315
+PASS baz(object, 106, 212) is 318
+PASS baz(object, 107, 214) is 321
+PASS baz(object, 108, 216) is 324
+PASS baz(object, 109, 218) is 327
+PASS baz(object, 110, 220) is 330
+PASS baz(object, 111, 222) is 333
+PASS baz(object, 112, 224) is 336
+PASS baz(object, 113, 226) is 339
+PASS baz(object, 114, 228) is 342
+PASS baz(object, 115, 230) is 345
+PASS baz(object, 116, 232) is 348
+PASS baz(object, 117, 234) is 351
+PASS baz(object, 118, 236) is 354
+PASS baz(object, 119, 238) is 357
+PASS baz(object, 120, 240) is 360
+PASS baz(object, 121, 242) is 363
+PASS baz(object, 122, 244) is 366
+PASS baz(object, 123, 246) is 369
+PASS baz(object, 124, 248) is 372
+PASS baz(object, 125, 250) is 375
+PASS baz(object, 126, 252) is 378
+PASS baz(object, 127, 254) is 381
+PASS baz(object, 128, 256) is 384
+PASS baz(object, 129, 258) is 387
+PASS baz(object, 130, 260) is 390
+PASS baz(object, 131, 262) is 393
+PASS baz(object, 132, 264) is 396
+PASS baz(object, 133, 266) is 399
+PASS baz(object, 134, 268) is 402
+PASS baz(object, 135, 270) is 405
+PASS baz(object, 136, 272) is 408
+PASS baz(object, 137, 274) is 411
+PASS baz(object, 138, 276) is 414
+PASS baz(object, 139, 278) is 417
+PASS baz(object, 140, 280) is 420
+PASS baz(object, 141, 282) is 423
+PASS baz(object, 142, 284) is 426
+PASS baz(object, 143, 286) is 429
+PASS baz(object, 144, 288) is 432
+PASS baz(object, 145, 290) is 435
+PASS baz(object, 146, 292) is 438
+PASS baz(object, 147, 294) is 441
+PASS baz(object, 148, 296) is 444
+PASS baz(object, 149, 298) is 447
+PASS baz(object, 150, 300) is 450
+PASS baz(object, 151, 302) is 453
+PASS baz(object, 152, 304) is 456
+PASS baz(object, 153, 306) is 459
+PASS baz(object, 154, 308) is 462
+PASS baz(object, 155, 310) is 465
+PASS baz(object, 156, 312) is 468
+PASS baz(object, 157, 314) is 471
+PASS baz(object, 158, 316) is 474
+PASS baz(object, 159, 318) is 477
+PASS baz(object, 160, 320) is 480
+PASS baz(object, 161, 322) is 483
+PASS baz(object, 162, 324) is 486
+PASS baz(object, 163, 326) is 489
+PASS baz(object, 164, 328) is 492
+PASS baz(object, 165, 330) is 495
+PASS baz(object, 166, 332) is 498
+PASS baz(object, 167, 334) is 501
+PASS baz(object, 168, 336) is 504
+PASS baz(object, 169, 338) is 507
+PASS baz(object, 170, 340) is 510
+PASS baz(object, 171, 342) is 513
+PASS baz(object, 172, 344) is 516
+PASS baz(object, 173, 346) is 519
+PASS baz(object, 174, 348) is 522
+PASS baz(object, 175, 350) is 525
+PASS baz(object, 176, 352) is 528
+PASS baz(object, 177, 354) is 531
+PASS baz(object, 178, 356) is 534
+PASS baz(object, 179, 358) is 537
+PASS baz(object, 180, 360) is 540
+PASS baz(object, 181, 362) is 543
+PASS baz(object, 182, 364) is 546
+PASS baz(object, 183, 366) is 549
+PASS baz(object, 184, 368) is 552
+PASS baz(object, 185, 370) is 555
+PASS baz(object, 186, 372) is 558
+PASS baz(object, 187, 374) is 561
+PASS baz(object, 188, 376) is 564
+PASS baz(object, 189, 378) is 567
+PASS baz(object, 190, 380) is 570
+PASS baz(object, 191, 382) is 573
+PASS baz(object, 192, 384) is 576
+PASS baz(object, 193, 386) is 579
+PASS baz(object, 194, 388) is 582
+PASS baz(object, 195, 390) is 585
+PASS baz(object, 196, 392) is 588
+PASS baz(object, 197, 394) is 591
+PASS baz(object, 198, 396) is 594
+PASS baz(object, 199, 398) is 597
+PASS baz(object, 200, 400) is 600
+PASS baz(object, 201, 402) is 603
+PASS baz(object, 202, 404) is 606
+PASS baz(object, 203, 406) is 609
+PASS baz(object, 204, 408) is 612
+PASS baz(object, 205, 410) is 615
+PASS baz(object, 206, 412) is 618
+PASS baz(object, 207, 414) is 621
+PASS baz(object, 208, 416) is 624
+PASS baz(object, 209, 418) is 627
+PASS baz(object, 210, 420) is 630
+PASS baz(object, 211, 422) is 633
+PASS baz(object, 212, 424) is 636
+PASS baz(object, 213, 426) is 639
+PASS baz(object, 214, 428) is 642
+PASS baz(object, 215, 430) is 645
+PASS baz(object, 216, 432) is 648
+PASS baz(object, 217, 434) is 651
+PASS baz(object, 218, 436) is 654
+PASS baz(object, 219, 438) is 657
+PASS baz(object, 220, 440) is 660
+PASS baz(object, 221, 442) is 663
+PASS baz(object, 222, 444) is 666
+PASS baz(object, 223, 446) is 669
+PASS baz(object, 224, 448) is 672
+PASS baz(object, 225, 450) is 675
+PASS baz(object, 226, 452) is 678
+PASS baz(object, 227, 454) is 681
+PASS baz(object, 228, 456) is 684
+PASS baz(object, 229, 458) is 687
+PASS baz(object, 230, 460) is 690
+PASS baz(object, 231, 462) is 693
+PASS baz(object, 232, 464) is 696
+PASS baz(object, 233, 466) is 699
+PASS baz(object, 234, 468) is 702
+PASS baz(object, 235, 470) is 705
+PASS baz(object, 236, 472) is 708
+PASS baz(object, 237, 474) is 711
+PASS baz(object, 238, 476) is 714
+PASS baz(object, 239, 478) is 717
+PASS baz(object, 240, 480) is 720
+PASS baz(object, 241, 482) is 723
+PASS baz(object, 242, 484) is 726
+PASS baz(object, 243, 486) is 729
+PASS baz(object, 244, 488) is 732
+PASS baz(object, 245, 490) is 735
+PASS baz(object, 246, 492) is 738
+PASS baz(object, 247, 494) is 741
+PASS baz(object, 248, 496) is 744
+PASS baz(object, 249, 498) is 747
+PASS baz(object, 250, 500) is 750
+PASS baz(object, 251, 502) is 753
+PASS baz(object, 252, 504) is 756
+PASS baz(object, 253, 506) is 759
+PASS baz(object, 254, 508) is 762
+PASS baz(object, 255, 510) is 765
+PASS baz(object, 256, 512) is 768
+PASS baz(object, 257, 514) is 771
+PASS baz(object, 258, 516) is 774
+PASS baz(object, 259, 518) is 777
+PASS baz(object, 260, 520) is 780
+PASS baz(object, 261, 522) is 783
+PASS baz(object, 262, 524) is 786
+PASS baz(object, 263, 526) is 789
+PASS baz(object, 264, 528) is 792
+PASS baz(object, 265, 530) is 795
+PASS baz(object, 266, 532) is 798
+PASS baz(object, 267, 534) is 801
+PASS baz(object, 268, 536) is 804
+PASS baz(object, 269, 538) is 807
+PASS baz(object, 270, 540) is 810
+PASS baz(object, 271, 542) is 813
+PASS baz(object, 272, 544) is 816
+PASS baz(object, 273, 546) is 819
+PASS baz(object, 274, 548) is 822
+PASS baz(object, 275, 550) is 825
+PASS baz(object, 276, 552) is 828
+PASS baz(object, 277, 554) is 831
+PASS baz(object, 278, 556) is 834
+PASS baz(object, 279, 558) is 837
+PASS baz(object, 280, 560) is 840
+PASS baz(object, 281, 562) is 843
+PASS baz(object, 282, 564) is 846
+PASS baz(object, 283, 566) is 849
+PASS baz(object, 284, 568) is 852
+PASS baz(object, 285, 570) is 855
+PASS baz(object, 286, 572) is 858
+PASS baz(object, 287, 574) is 861
+PASS baz(object, 288, 576) is 864
+PASS baz(object, 289, 578) is 867
+PASS baz(object, 290, 580) is 870
+PASS baz(object, 291, 582) is 873
+PASS baz(object, 292, 584) is 876
+PASS baz(object, 293, 586) is 879
+PASS baz(object, 294, 588) is 882
+PASS baz(object, 295, 590) is 885
+PASS baz(object, 296, 592) is 888
+PASS baz(object, 297, 594) is 891
+PASS baz(object, 298, 596) is 894
+PASS baz(object, 299, 598) is 897
+PASS baz(object, 300, 600) is 900
+PASS baz(object, 301, 602) is 903
+PASS baz(object, 302, 604) is 906
+PASS baz(object, 303, 606) is 909
+PASS baz(object, 304, 608) is 912
+PASS baz(object, 305, 610) is 915
+PASS baz(object, 306, 612) is 918
+PASS baz(object, 307, 614) is 921
+PASS baz(object, 308, 616) is 924
+PASS baz(object, 309, 618) is 927
+PASS baz(object, 310, 620) is 930
+PASS baz(object, 311, 622) is 933
+PASS baz(object, 312, 624) is 936
+PASS baz(object, 313, 626) is 939
+PASS baz(object, 314, 628) is 942
+PASS baz(object, 315, 630) is 945
+PASS baz(object, 316, 632) is 948
+PASS baz(object, 317, 634) is 951
+PASS baz(object, 318, 636) is 954
+PASS baz(object, 319, 638) is 957
+PASS baz(object, 320, 640) is 960
+PASS baz(object, 321, 642) is 963
+PASS baz(object, 322, 644) is 966
+PASS baz(object, 323, 646) is 969
+PASS baz(object, 324, 648) is 972
+PASS baz(object, 325, 650) is 975
+PASS baz(object, 326, 652) is 978
+PASS baz(object, 327, 654) is 981
+PASS baz(object, 328, 656) is 984
+PASS baz(object, 329, 658) is 987
+PASS baz(object, 330, 660) is 990
+PASS baz(object, 331, 662) is 993
+PASS baz(object, 332, 664) is 996
+PASS baz(object, 333, 666) is 999
+PASS baz(object, 334, 668) is 1002
+PASS baz(object, 335, 670) is 1005
+PASS baz(object, 336, 672) is 1008
+PASS baz(object, 337, 674) is 1011
+PASS baz(object, 338, 676) is 1014
+PASS baz(object, 339, 678) is 1017
+PASS baz(object, 340, 680) is 1020
+PASS baz(object, 341, 682) is 1023
+PASS baz(object, 342, 684) is 1026
+PASS baz(object, 343, 686) is 1029
+PASS baz(object, 344, 688) is 1032
+PASS baz(object, 345, 690) is 1035
+PASS baz(object, 346, 692) is 1038
+PASS baz(object, 347, 694) is 1041
+PASS baz(object, 348, 696) is 1044
+PASS baz(object, 349, 698) is 1047
+PASS baz(object, 350, 700) is 1050
+PASS baz(object, 351, 702) is 1053
+PASS baz(object, 352, 704) is 1056
+PASS baz(object, 353, 706) is 1059
+PASS baz(object, 354, 708) is 1062
+PASS baz(object, 355, 710) is 1065
+PASS baz(object, 356, 712) is 1068
+PASS baz(object, 357, 714) is 1071
+PASS baz(object, 358, 716) is 1074
+PASS baz(object, 359, 718) is 1077
+PASS baz(object, 360, 720) is 1080
+PASS baz(object, 361, 722) is 1083
+PASS baz(object, 362, 724) is 1086
+PASS baz(object, 363, 726) is 1089
+PASS baz(object, 364, 728) is 1092
+PASS baz(object, 365, 730) is 1095
+PASS baz(object, 366, 732) is 1098
+PASS baz(object, 367, 734) is 1101
+PASS baz(object, 368, 736) is 1104
+PASS baz(object, 369, 738) is 1107
+PASS baz(object, 370, 740) is 1110
+PASS baz(object, 371, 742) is 1113
+PASS baz(object, 372, 744) is 1116
+PASS baz(object, 373, 746) is 1119
+PASS baz(object, 374, 748) is 1122
+PASS baz(object, 375, 750) is 1125
+PASS baz(object, 376, 752) is 1128
+PASS baz(object, 377, 754) is 1131
+PASS baz(object, 378, 756) is 1134
+PASS baz(object, 379, 758) is 1137
+PASS baz(object, 380, 760) is 1140
+PASS baz(object, 381, 762) is 1143
+PASS baz(object, 382, 764) is 1146
+PASS baz(object, 383, 766) is 1149
+PASS baz(object, 384, 768) is 1152
+PASS baz(object, 385, 770) is 1155
+PASS baz(object, 386, 772) is 1158
+PASS baz(object, 387, 774) is 1161
+PASS baz(object, 388, 776) is 1164
+PASS baz(object, 389, 778) is 1167
+PASS baz(object, 390, 780) is 1170
+PASS baz(object, 391, 782) is 1173
+PASS baz(object, 392, 784) is 1176
+PASS baz(object, 393, 786) is 1179
+PASS baz(object, 394, 788) is 1182
+PASS baz(object, 395, 790) is 1185
+PASS baz(object, 396, 792) is 1188
+PASS baz(object, 397, 794) is 1191
+PASS baz(object, 398, 796) is 1194
+PASS baz(object, 399, 798) is 1197
+PASS baz(object, 400, 800) is 1200
+PASS baz(object, 401, 802) is 1203
+PASS baz(object, 402, 804) is 1206
+PASS baz(object, 403, 806) is 1209
+PASS baz(object, 404, 808) is 1212
+PASS baz(object, 405, 810) is 1215
+PASS baz(object, 406, 812) is 1218
+PASS baz(object, 407, 814) is 1221
+PASS baz(object, 408, 816) is 1224
+PASS baz(object, 409, 818) is 1227
+PASS baz(object, 410, 820) is 1230
+PASS baz(object, 411, 822) is 1233
+PASS baz(object, 412, 824) is 1236
+PASS baz(object, 413, 826) is 1239
+PASS baz(object, 414, 828) is 1242
+PASS baz(object, 415, 830) is 1245
+PASS baz(object, 416, 832) is 1248
+PASS baz(object, 417, 834) is 1251
+PASS baz(object, 418, 836) is 1254
+PASS baz(object, 419, 838) is 1257
+PASS baz(object, 420, 840) is 1260
+PASS baz(object, 421, 842) is 1263
+PASS baz(object, 422, 844) is 1266
+PASS baz(object, 423, 846) is 1269
+PASS baz(object, 424, 848) is 1272
+PASS baz(object, 425, 850) is 1275
+PASS baz(object, 426, 852) is 1278
+PASS baz(object, 427, 854) is 1281
+PASS baz(object, 428, 856) is 1284
+PASS baz(object, 429, 858) is 1287
+PASS baz(object, 430, 860) is 1290
+PASS baz(object, 431, 862) is 1293
+PASS baz(object, 432, 864) is 1296
+PASS baz(object, 433, 866) is 1299
+PASS baz(object, 434, 868) is 1302
+PASS baz(object, 435, 870) is 1305
+PASS baz(object, 436, 872) is 1308
+PASS baz(object, 437, 874) is 1311
+PASS baz(object, 438, 876) is 1314
+PASS baz(object, 439, 878) is 1317
+PASS baz(object, 440, 880) is 1320
+PASS baz(object, 441, 882) is 1323
+PASS baz(object, 442, 884) is 1326
+PASS baz(object, 443, 886) is 1329
+PASS baz(object, 444, 888) is 1332
+PASS baz(object, 445, 890) is 1335
+PASS baz(object, 446, 892) is 1338
+PASS baz(object, 447, 894) is 1341
+PASS baz(object, 448, 896) is 1344
+PASS baz(object, 449, 898) is 1347
+PASS baz(object, 450, 900) is 1350
+PASS baz(object, 451, 902) is 1353
+PASS baz(object, 452, 904) is 1356
+PASS baz(object, 453, 906) is 1359
+PASS baz(object, 454, 908) is 1362
+PASS baz(object, 455, 910) is 1365
+PASS baz(object, 456, 912) is 1368
+PASS baz(object, 457, 914) is 1371
+PASS baz(object, 458, 916) is 1374
+PASS baz(object, 459, 918) is 1377
+PASS baz(object, 460, 920) is 1380
+PASS baz(object, 461, 922) is 1383
+PASS baz(object, 462, 924) is 1386
+PASS baz(object, 463, 926) is 1389
+PASS baz(object, 464, 928) is 1392
+PASS baz(object, 465, 930) is 1395
+PASS baz(object, 466, 932) is 1398
+PASS baz(object, 467, 934) is 1401
+PASS baz(object, 468, 936) is 1404
+PASS baz(object, 469, 938) is 1407
+PASS baz(object, 470, 940) is 1410
+PASS baz(object, 471, 942) is 1413
+PASS baz(object, 472, 944) is 1416
+PASS baz(object, 473, 946) is 1419
+PASS baz(object, 474, 948) is 1422
+PASS baz(object, 475, 950) is 1425
+PASS baz(object, 476, 952) is 1428
+PASS baz(object, 477, 954) is 1431
+PASS baz(object, 478, 956) is 1434
+PASS baz(object, 479, 958) is 1437
+PASS baz(object, 480, 960) is 1440
+PASS baz(object, 481, 962) is 1443
+PASS baz(object, 482, 964) is 1446
+PASS baz(object, 483, 966) is 1449
+PASS baz(object, 484, 968) is 1452
+PASS baz(object, 485, 970) is 1455
+PASS baz(object, 486, 972) is 1458
+PASS baz(object, 487, 974) is 1461
+PASS baz(object, 488, 976) is 1464
+PASS baz(object, 489, 978) is 1467
+PASS baz(object, 490, 980) is 1470
+PASS baz(object, 491, 982) is 1473
+PASS baz(object, 492, 984) is 1476
+PASS baz(object, 493, 986) is 1479
+PASS baz(object, 494, 988) is 1482
+PASS baz(object, 495, 990) is 1485
+PASS baz(object, 496, 992) is 1488
+PASS baz(object, 497, 994) is 1491
+PASS baz(object, 498, 996) is 1494
+PASS baz(object, 499, 998) is 1497
+PASS baz(object, 500, 1000) is 1500
+PASS baz(object, 501, 1002) is 1503
+PASS baz(object, 502, 1004) is 1506
+PASS baz(object, 503, 1006) is 1509
+PASS baz(object, 504, 1008) is 1512
+PASS baz(object, 505, 1010) is 1515
+PASS baz(object, 506, 1012) is 1518
+PASS baz(object, 507, 1014) is 1521
+PASS baz(object, 508, 1016) is 1524
+PASS baz(object, 509, 1018) is 1527
+PASS baz(object, 510, 1020) is 1530
+PASS baz(object, 511, 1022) is 1533
+PASS baz(object, 512, 1024) is 1536
+PASS baz(object, 513, 1026) is 1539
+PASS baz(object, 514, 1028) is 1542
+PASS baz(object, 515, 1030) is 1545
+PASS baz(object, 516, 1032) is 1548
+PASS baz(object, 517, 1034) is 1551
+PASS baz(object, 518, 1036) is 1554
+PASS baz(object, 519, 1038) is 1557
+PASS baz(object, 520, 1040) is 1560
+PASS baz(object, 521, 1042) is 1563
+PASS baz(object, 522, 1044) is 1566
+PASS baz(object, 523, 1046) is 1569
+PASS baz(object, 524, 1048) is 1572
+PASS baz(object, 525, 1050) is 1575
+PASS baz(object, 526, 1052) is 1578
+PASS baz(object, 527, 1054) is 1581
+PASS baz(object, 528, 1056) is 1584
+PASS baz(object, 529, 1058) is 1587
+PASS baz(object, 530, 1060) is 1590
+PASS baz(object, 531, 1062) is 1593
+PASS baz(object, 532, 1064) is 1596
+PASS baz(object, 533, 1066) is 1599
+PASS baz(object, 534, 1068) is 1602
+PASS baz(object, 535, 1070) is 1605
+PASS baz(object, 536, 1072) is 1608
+PASS baz(object, 537, 1074) is 1611
+PASS baz(object, 538, 1076) is 1614
+PASS baz(object, 539, 1078) is 1617
+PASS baz(object, 540, 1080) is 1620
+PASS baz(object, 541, 1082) is 1623
+PASS baz(object, 542, 1084) is 1626
+PASS baz(object, 543, 1086) is 1629
+PASS baz(object, 544, 1088) is 1632
+PASS baz(object, 545, 1090) is 1635
+PASS baz(object, 546, 1092) is 1638
+PASS baz(object, 547, 1094) is 1641
+PASS baz(object, 548, 1096) is 1644
+PASS baz(object, 549, 1098) is 1647
+PASS baz(object, 550, 1100) is 1650
+PASS baz(object, 551, 1102) is 1653
+PASS baz(object, 552, 1104) is 1656
+PASS baz(object, 553, 1106) is 1659
+PASS baz(object, 554, 1108) is 1662
+PASS baz(object, 555, 1110) is 1665
+PASS baz(object, 556, 1112) is 1668
+PASS baz(object, 557, 1114) is 1671
+PASS baz(object, 558, 1116) is 1674
+PASS baz(object, 559, 1118) is 1677
+PASS baz(object, 560, 1120) is 1680
+PASS baz(object, 561, 1122) is 1683
+PASS baz(object, 562, 1124) is 1686
+PASS baz(object, 563, 1126) is 1689
+PASS baz(object, 564, 1128) is 1692
+PASS baz(object, 565, 1130) is 1695
+PASS baz(object, 566, 1132) is 1698
+PASS baz(object, 567, 1134) is 1701
+PASS baz(object, 568, 1136) is 1704
+PASS baz(object, 569, 1138) is 1707
+PASS baz(object, 570, 1140) is 1710
+PASS baz(object, 571, 1142) is 1713
+PASS baz(object, 572, 1144) is 1716
+PASS baz(object, 573, 1146) is 1719
+PASS baz(object, 574, 1148) is 1722
+PASS baz(object, 575, 1150) is 1725
+PASS baz(object, 576, 1152) is 1728
+PASS baz(object, 577, 1154) is 1731
+PASS baz(object, 578, 1156) is 1734
+PASS baz(object, 579, 1158) is 1737
+PASS baz(object, 580, 1160) is 1740
+PASS baz(object, 581, 1162) is 1743
+PASS baz(object, 582, 1164) is 1746
+PASS baz(object, 583, 1166) is 1749
+PASS baz(object, 584, 1168) is 1752
+PASS baz(object, 585, 1170) is 1755
+PASS baz(object, 586, 1172) is 1758
+PASS baz(object, 587, 1174) is 1761
+PASS baz(object, 588, 1176) is 1764
+PASS baz(object, 589, 1178) is 1767
+PASS baz(object, 590, 1180) is 1770
+PASS baz(object, 591, 1182) is 1773
+PASS baz(object, 592, 1184) is 1776
+PASS baz(object, 593, 1186) is 1779
+PASS baz(object, 594, 1188) is 1782
+PASS baz(object, 595, 1190) is 1785
+PASS baz(object, 596, 1192) is 1788
+PASS baz(object, 597, 1194) is 1791
+PASS baz(object, 598, 1196) is 1794
+PASS baz(object, 599, 1198) is 1797
+PASS baz(object, 600, 1200) is 1842
+PASS baz(object, 601, 1202) is 1845
+PASS baz(object, 602, 1204) is 1848
+PASS baz(object, 603, 1206) is 1851
+PASS baz(object, 604, 1208) is 1854
+PASS baz(object, 605, 1210) is 1857
+PASS baz(object, 606, 1212) is 1860
+PASS baz(object, 607, 1214) is 1863
+PASS baz(object, 608, 1216) is 1866
+PASS baz(object, 609, 1218) is 1869
+PASS baz(object, 610, 1220) is 1872
+PASS baz(object, 611, 1222) is 1875
+PASS baz(object, 612, 1224) is 1878
+PASS baz(object, 613, 1226) is 1881
+PASS baz(object, 614, 1228) is 1884
+PASS baz(object, 615, 1230) is 1887
+PASS baz(object, 616, 1232) is 1890
+PASS baz(object, 617, 1234) is 1893
+PASS baz(object, 618, 1236) is 1896
+PASS baz(object, 619, 1238) is 1899
+PASS baz(object, 620, 1240) is 1902
+PASS baz(object, 621, 1242) is 1905
+PASS baz(object, 622, 1244) is 1908
+PASS baz(object, 623, 1246) is 1911
+PASS baz(object, 624, 1248) is 1914
+PASS baz(object, 625, 1250) is 1917
+PASS baz(object, 626, 1252) is 1920
+PASS baz(object, 627, 1254) is 1923
+PASS baz(object, 628, 1256) is 1926
+PASS baz(object, 629, 1258) is 1929
+PASS baz(object, 630, 1260) is 1932
+PASS baz(object, 631, 1262) is 1935
+PASS baz(object, 632, 1264) is 1938
+PASS baz(object, 633, 1266) is 1941
+PASS baz(object, 634, 1268) is 1944
+PASS baz(object, 635, 1270) is 1947
+PASS baz(object, 636, 1272) is 1950
+PASS baz(object, 637, 1274) is 1953
+PASS baz(object, 638, 1276) is 1956
+PASS baz(object, 639, 1278) is 1959
+PASS baz(object, 640, 1280) is 1962
+PASS baz(object, 641, 1282) is 1965
+PASS baz(object, 642, 1284) is 1968
+PASS baz(object, 643, 1286) is 1971
+PASS baz(object, 644, 1288) is 1974
+PASS baz(object, 645, 1290) is 1977
+PASS baz(object, 646, 1292) is 1980
+PASS baz(object, 647, 1294) is 1983
+PASS baz(object, 648, 1296) is 1986
+PASS baz(object, 649, 1298) is 1989
+PASS baz(object, 650, 1300) is 1992
+PASS baz(object, 651, 1302) is 1995
+PASS baz(object, 652, 1304) is 1998
+PASS baz(object, 653, 1306) is 2001
+PASS baz(object, 654, 1308) is 2004
+PASS baz(object, 655, 1310) is 2007
+PASS baz(object, 656, 1312) is 2010
+PASS baz(object, 657, 1314) is 2013
+PASS baz(object, 658, 1316) is 2016
+PASS baz(object, 659, 1318) is 2019
+PASS baz(object, 660, 1320) is 2022
+PASS baz(object, 661, 1322) is 2025
+PASS baz(object, 662, 1324) is 2028
+PASS baz(object, 663, 1326) is 2031
+PASS baz(object, 664, 1328) is 2034
+PASS baz(object, 665, 1330) is 2037
+PASS baz(object, 666, 1332) is 2040
+PASS baz(object, 667, 1334) is 2043
+PASS baz(object, 668, 1336) is 2046
+PASS baz(object, 669, 1338) is 2049
+PASS baz(object, 670, 1340) is 2052
+PASS baz(object, 671, 1342) is 2055
+PASS baz(object, 672, 1344) is 2058
+PASS baz(object, 673, 1346) is 2061
+PASS baz(object, 674, 1348) is 2064
+PASS baz(object, 675, 1350) is 2067
+PASS baz(object, 676, 1352) is 2070
+PASS baz(object, 677, 1354) is 2073
+PASS baz(object, 678, 1356) is 2076
+PASS baz(object, 679, 1358) is 2079
+PASS baz(object, 680, 1360) is 2082
+PASS baz(object, 681, 1362) is 2085
+PASS baz(object, 682, 1364) is 2088
+PASS baz(object, 683, 1366) is 2091
+PASS baz(object, 684, 1368) is 2094
+PASS baz(object, 685, 1370) is 2097
+PASS baz(object, 686, 1372) is 2100
+PASS baz(object, 687, 1374) is 2103
+PASS baz(object, 688, 1376) is 2106
+PASS baz(object, 689, 1378) is 2109
+PASS baz(object, 690, 1380) is 2112
+PASS baz(object, 691, 1382) is 2115
+PASS baz(object, 692, 1384) is 2118
+PASS baz(object, 693, 1386) is 2121
+PASS baz(object, 694, 1388) is 2124
+PASS baz(object, 695, 1390) is 2127
+PASS baz(object, 696, 1392) is 2130
+PASS baz(object, 697, 1394) is 2133
+PASS baz(object, 698, 1396) is 2136
+PASS baz(object, 699, 1398) is 2139
+PASS baz(object, 700, 1400) is 2142
+PASS baz(object, 701, 1402) is 2145
+PASS baz(object, 702, 1404) is 2148
+PASS baz(object, 703, 1406) is 2151
+PASS baz(object, 704, 1408) is 2154
+PASS baz(object, 705, 1410) is 2157
+PASS baz(object, 706, 1412) is 2160
+PASS baz(object, 707, 1414) is 2163
+PASS baz(object, 708, 1416) is 2166
+PASS baz(object, 709, 1418) is 2169
+PASS baz(object, 710, 1420) is 2172
+PASS baz(object, 711, 1422) is 2175
+PASS baz(object, 712, 1424) is 2178
+PASS baz(object, 713, 1426) is 2181
+PASS baz(object, 714, 1428) is 2184
+PASS baz(object, 715, 1430) is 2187
+PASS baz(object, 716, 1432) is 2190
+PASS baz(object, 717, 1434) is 2193
+PASS baz(object, 718, 1436) is 2196
+PASS baz(object, 719, 1438) is 2199
+PASS baz(object, 720, 1440) is 2202
+PASS baz(object, 721, 1442) is 2205
+PASS baz(object, 722, 1444) is 2208
+PASS baz(object, 723, 1446) is 2211
+PASS baz(object, 724, 1448) is 2214
+PASS baz(object, 725, 1450) is 2217
+PASS baz(object, 726, 1452) is 2220
+PASS baz(object, 727, 1454) is 2223
+PASS baz(object, 728, 1456) is 2226
+PASS baz(object, 729, 1458) is 2229
+PASS baz(object, 730, 1460) is 2232
+PASS baz(object, 731, 1462) is 2235
+PASS baz(object, 732, 1464) is 2238
+PASS baz(object, 733, 1466) is 2241
+PASS baz(object, 734, 1468) is 2244
+PASS baz(object, 735, 1470) is 2247
+PASS baz(object, 736, 1472) is 2250
+PASS baz(object, 737, 1474) is 2253
+PASS baz(object, 738, 1476) is 2256
+PASS baz(object, 739, 1478) is 2259
+PASS baz(object, 740, 1480) is 2262
+PASS baz(object, 741, 1482) is 2265
+PASS baz(object, 742, 1484) is 2268
+PASS baz(object, 743, 1486) is 2271
+PASS baz(object, 744, 1488) is 2274
+PASS baz(object, 745, 1490) is 2277
+PASS baz(object, 746, 1492) is 2280
+PASS baz(object, 747, 1494) is 2283
+PASS baz(object, 748, 1496) is 2286
+PASS baz(object, 749, 1498) is 2289
+PASS baz(object, 750, 1500) is 2292
+PASS baz(object, 751, 1502) is 2295
+PASS baz(object, 752, 1504) is 2298
+PASS baz(object, 753, 1506) is 2301
+PASS baz(object, 754, 1508) is 2304
+PASS baz(object, 755, 1510) is 2307
+PASS baz(object, 756, 1512) is 2310
+PASS baz(object, 757, 1514) is 2313
+PASS baz(object, 758, 1516) is 2316
+PASS baz(object, 759, 1518) is 2319
+PASS baz(object, 760, 1520) is 2322
+PASS baz(object, 761, 1522) is 2325
+PASS baz(object, 762, 1524) is 2328
+PASS baz(object, 763, 1526) is 2331
+PASS baz(object, 764, 1528) is 2334
+PASS baz(object, 765, 1530) is 2337
+PASS baz(object, 766, 1532) is 2340
+PASS baz(object, 767, 1534) is 2343
+PASS baz(object, 768, 1536) is 2346
+PASS baz(object, 769, 1538) is 2349
+PASS baz(object, 770, 1540) is 2352
+PASS baz(object, 771, 1542) is 2355
+PASS baz(object, 772, 1544) is 2358
+PASS baz(object, 773, 1546) is 2361
+PASS baz(object, 774, 1548) is 2364
+PASS baz(object, 775, 1550) is 2367
+PASS baz(object, 776, 1552) is 2370
+PASS baz(object, 777, 1554) is 2373
+PASS baz(object, 778, 1556) is 2376
+PASS baz(object, 779, 1558) is 2379
+PASS baz(object, 780, 1560) is 2382
+PASS baz(object, 781, 1562) is 2385
+PASS baz(object, 782, 1564) is 2388
+PASS baz(object, 783, 1566) is 2391
+PASS baz(object, 784, 1568) is 2394
+PASS baz(object, 785, 1570) is 2397
+PASS baz(object, 786, 1572) is 2400
+PASS baz(object, 787, 1574) is 2403
+PASS baz(object, 788, 1576) is 2406
+PASS baz(object, 789, 1578) is 2409
+PASS baz(object, 790, 1580) is 2412
+PASS baz(object, 791, 1582) is 2415
+PASS baz(object, 792, 1584) is 2418
+PASS baz(object, 793, 1586) is 2421
+PASS baz(object, 794, 1588) is 2424
+PASS baz(object, 795, 1590) is 2427
+PASS baz(object, 796, 1592) is 2430
+PASS baz(object, 797, 1594) is 2433
+PASS baz(object, 798, 1596) is 2436
+PASS baz(object, 799, 1598) is 2439
+PASS baz(object, 800, 1600) is 2442
+PASS baz(object, 801, 1602) is 2445
+PASS baz(object, 802, 1604) is 2448
+PASS baz(object, 803, 1606) is 2451
+PASS baz(object, 804, 1608) is 2454
+PASS baz(object, 805, 1610) is 2457
+PASS baz(object, 806, 1612) is 2460
+PASS baz(object, 807, 1614) is 2463
+PASS baz(object, 808, 1616) is 2466
+PASS baz(object, 809, 1618) is 2469
+PASS baz(object, 810, 1620) is 2472
+PASS baz(object, 811, 1622) is 2475
+PASS baz(object, 812, 1624) is 2478
+PASS baz(object, 813, 1626) is 2481
+PASS baz(object, 814, 1628) is 2484
+PASS baz(object, 815, 1630) is 2487
+PASS baz(object, 816, 1632) is 2490
+PASS baz(object, 817, 1634) is 2493
+PASS baz(object, 818, 1636) is 2496
+PASS baz(object, 819, 1638) is 2499
+PASS baz(object, 820, 1640) is 2502
+PASS baz(object, 821, 1642) is 2505
+PASS baz(object, 822, 1644) is 2508
+PASS baz(object, 823, 1646) is 2511
+PASS baz(object, 824, 1648) is 2514
+PASS baz(object, 825, 1650) is 2517
+PASS baz(object, 826, 1652) is 2520
+PASS baz(object, 827, 1654) is 2523
+PASS baz(object, 828, 1656) is 2526
+PASS baz(object, 829, 1658) is 2529
+PASS baz(object, 830, 1660) is 2532
+PASS baz(object, 831, 1662) is 2535
+PASS baz(object, 832, 1664) is 2538
+PASS baz(object, 833, 1666) is 2541
+PASS baz(object, 834, 1668) is 2544
+PASS baz(object, 835, 1670) is 2547
+PASS baz(object, 836, 1672) is 2550
+PASS baz(object, 837, 1674) is 2553
+PASS baz(object, 838, 1676) is 2556
+PASS baz(object, 839, 1678) is 2559
+PASS baz(object, 840, 1680) is 2562
+PASS baz(object, 841, 1682) is 2565
+PASS baz(object, 842, 1684) is 2568
+PASS baz(object, 843, 1686) is 2571
+PASS baz(object, 844, 1688) is 2574
+PASS baz(object, 845, 1690) is 2577
+PASS baz(object, 846, 1692) is 2580
+PASS baz(object, 847, 1694) is 2583
+PASS baz(object, 848, 1696) is 2586
+PASS baz(object, 849, 1698) is 2589
+PASS baz(object, 850, 1700) is 2592
+PASS baz(object, 851, 1702) is 2595
+PASS baz(object, 852, 1704) is 2598
+PASS baz(object, 853, 1706) is 2601
+PASS baz(object, 854, 1708) is 2604
+PASS baz(object, 855, 1710) is 2607
+PASS baz(object, 856, 1712) is 2610
+PASS baz(object, 857, 1714) is 2613
+PASS baz(object, 858, 1716) is 2616
+PASS baz(object, 859, 1718) is 2619
+PASS baz(object, 860, 1720) is 2622
+PASS baz(object, 861, 1722) is 2625
+PASS baz(object, 862, 1724) is 2628
+PASS baz(object, 863, 1726) is 2631
+PASS baz(object, 864, 1728) is 2634
+PASS baz(object, 865, 1730) is 2637
+PASS baz(object, 866, 1732) is 2640
+PASS baz(object, 867, 1734) is 2643
+PASS baz(object, 868, 1736) is 2646
+PASS baz(object, 869, 1738) is 2649
+PASS baz(object, 870, 1740) is 2652
+PASS baz(object, 871, 1742) is 2655
+PASS baz(object, 872, 1744) is 2658
+PASS baz(object, 873, 1746) is 2661
+PASS baz(object, 874, 1748) is 2664
+PASS baz(object, 875, 1750) is 2667
+PASS baz(object, 876, 1752) is 2670
+PASS baz(object, 877, 1754) is 2673
+PASS baz(object, 878, 1756) is 2676
+PASS baz(object, 879, 1758) is 2679
+PASS baz(object, 880, 1760) is 2682
+PASS baz(object, 881, 1762) is 2685
+PASS baz(object, 882, 1764) is 2688
+PASS baz(object, 883, 1766) is 2691
+PASS baz(object, 884, 1768) is 2694
+PASS baz(object, 885, 1770) is 2697
+PASS baz(object, 886, 1772) is 2700
+PASS baz(object, 887, 1774) is 2703
+PASS baz(object, 888, 1776) is 2706
+PASS baz(object, 889, 1778) is 2709
+PASS baz(object, 890, 1780) is 2712
+PASS baz(object, 891, 1782) is 2715
+PASS baz(object, 892, 1784) is 2718
+PASS baz(object, 893, 1786) is 2721
+PASS baz(object, 894, 1788) is 2724
+PASS baz(object, 895, 1790) is 2727
+PASS baz(object, 896, 1792) is 2730
+PASS baz(object, 897, 1794) is 2733
+PASS baz(object, 898, 1796) is 2736
+PASS baz(object, 899, 1798) is 2739
+PASS baz(object, 900, 1800) is 2742
+PASS baz(object, 901, 1802) is 2745
+PASS baz(object, 902, 1804) is 2748
+PASS baz(object, 903, 1806) is 2751
+PASS baz(object, 904, 1808) is 2754
+PASS baz(object, 905, 1810) is 2757
+PASS baz(object, 906, 1812) is 2760
+PASS baz(object, 907, 1814) is 2763
+PASS baz(object, 908, 1816) is 2766
+PASS baz(object, 909, 1818) is 2769
+PASS baz(object, 910, 1820) is 2772
+PASS baz(object, 911, 1822) is 2775
+PASS baz(object, 912, 1824) is 2778
+PASS baz(object, 913, 1826) is 2781
+PASS baz(object, 914, 1828) is 2784
+PASS baz(object, 915, 1830) is 2787
+PASS baz(object, 916, 1832) is 2790
+PASS baz(object, 917, 1834) is 2793
+PASS baz(object, 918, 1836) is 2796
+PASS baz(object, 919, 1838) is 2799
+PASS baz(object, 920, 1840) is 2802
+PASS baz(object, 921, 1842) is 2805
+PASS baz(object, 922, 1844) is 2808
+PASS baz(object, 923, 1846) is 2811
+PASS baz(object, 924, 1848) is 2814
+PASS baz(object, 925, 1850) is 2817
+PASS baz(object, 926, 1852) is 2820
+PASS baz(object, 927, 1854) is 2823
+PASS baz(object, 928, 1856) is 2826
+PASS baz(object, 929, 1858) is 2829
+PASS baz(object, 930, 1860) is 2832
+PASS baz(object, 931, 1862) is 2835
+PASS baz(object, 932, 1864) is 2838
+PASS baz(object, 933, 1866) is 2841
+PASS baz(object, 934, 1868) is 2844
+PASS baz(object, 935, 1870) is 2847
+PASS baz(object, 936, 1872) is 2850
+PASS baz(object, 937, 1874) is 2853
+PASS baz(object, 938, 1876) is 2856
+PASS baz(object, 939, 1878) is 2859
+PASS baz(object, 940, 1880) is 2862
+PASS baz(object, 941, 1882) is 2865
+PASS baz(object, 942, 1884) is 2868
+PASS baz(object, 943, 1886) is 2871
+PASS baz(object, 944, 1888) is 2874
+PASS baz(object, 945, 1890) is 2877
+PASS baz(object, 946, 1892) is 2880
+PASS baz(object, 947, 1894) is 2883
+PASS baz(object, 948, 1896) is 2886
+PASS baz(object, 949, 1898) is 2889
+PASS baz(object, 950, 1900) is 2892
+PASS baz(object, 951, 1902) is 2895
+PASS baz(object, 952, 1904) is 2898
+PASS baz(object, 953, 1906) is 2901
+PASS baz(object, 954, 1908) is 2904
+PASS baz(object, 955, 1910) is 2907
+PASS baz(object, 956, 1912) is 2910
+PASS baz(object, 957, 1914) is 2913
+PASS baz(object, 958, 1916) is 2916
+PASS baz(object, 959, 1918) is 2919
+PASS baz(object, 960, 1920) is 2922
+PASS baz(object, 961, 1922) is 2925
+PASS baz(object, 962, 1924) is 2928
+PASS baz(object, 963, 1926) is 2931
+PASS baz(object, 964, 1928) is 2934
+PASS baz(object, 965, 1930) is 2937
+PASS baz(object, 966, 1932) is 2940
+PASS baz(object, 967, 1934) is 2943
+PASS baz(object, 968, 1936) is 2946
+PASS baz(object, 969, 1938) is 2949
+PASS baz(object, 970, 1940) is 2952
+PASS baz(object, 971, 1942) is 2955
+PASS baz(object, 972, 1944) is 2958
+PASS baz(object, 973, 1946) is 2961
+PASS baz(object, 974, 1948) is 2964
+PASS baz(object, 975, 1950) is 2967
+PASS baz(object, 976, 1952) is 2970
+PASS baz(object, 977, 1954) is 2973
+PASS baz(object, 978, 1956) is 2976
+PASS baz(object, 979, 1958) is 2979
+PASS baz(object, 980, 1960) is 2982
+PASS baz(object, 981, 1962) is 2985
+PASS baz(object, 982, 1964) is 2988
+PASS baz(object, 983, 1966) is 2991
+PASS baz(object, 984, 1968) is 2994
+PASS baz(object, 985, 1970) is 2997
+PASS baz(object, 986, 1972) is 3000
+PASS baz(object, 987, 1974) is 3003
+PASS baz(object, 988, 1976) is 3006
+PASS baz(object, 989, 1978) is 3009
+PASS baz(object, 990, 1980) is 3012
+PASS baz(object, 991, 1982) is 3015
+PASS baz(object, 992, 1984) is 3018
+PASS baz(object, 993, 1986) is 3021
+PASS baz(object, 994, 1988) is 3024
+PASS baz(object, 995, 1990) is 3027
+PASS baz(object, 996, 1992) is 3030
+PASS baz(object, 997, 1994) is 3033
+PASS baz(object, 998, 1996) is 3036
+PASS baz(object, 999, 1998) is 3039
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-unused-this-method-check-expected.txt b/test/webkit/dfg-inline-unused-this-method-check-expected.txt
new file mode 100644 (file)
index 0000000..1bcd857
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that inlining a function that does not use this does not result in this being lost entirely, if we succeed in doing method check optimizations.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS baz(object, 0, 0) is 0
+PASS baz(object, 1, 2) is 3
+PASS baz(object, 2, 4) is 6
+PASS baz(object, 3, 6) is 9
+PASS baz(object, 4, 8) is 12
+PASS baz(object, 5, 10) is 15
+PASS baz(object, 6, 12) is 18
+PASS baz(object, 7, 14) is 21
+PASS baz(object, 8, 16) is 24
+PASS baz(object, 9, 18) is 27
+PASS baz(object, 10, 20) is 30
+PASS baz(object, 11, 22) is 33
+PASS baz(object, 12, 24) is 36
+PASS baz(object, 13, 26) is 39
+PASS baz(object, 14, 28) is 42
+PASS baz(object, 15, 30) is 45
+PASS baz(object, 16, 32) is 48
+PASS baz(object, 17, 34) is 51
+PASS baz(object, 18, 36) is 54
+PASS baz(object, 19, 38) is 57
+PASS baz(object, 20, 40) is 60
+PASS baz(object, 21, 42) is 63
+PASS baz(object, 22, 44) is 66
+PASS baz(object, 23, 46) is 69
+PASS baz(object, 24, 48) is 72
+PASS baz(object, 25, 50) is 75
+PASS baz(object, 26, 52) is 78
+PASS baz(object, 27, 54) is 81
+PASS baz(object, 28, 56) is 84
+PASS baz(object, 29, 58) is 87
+PASS baz(object, 30, 60) is 90
+PASS baz(object, 31, 62) is 93
+PASS baz(object, 32, 64) is 96
+PASS baz(object, 33, 66) is 99
+PASS baz(object, 34, 68) is 102
+PASS baz(object, 35, 70) is 105
+PASS baz(object, 36, 72) is 108
+PASS baz(object, 37, 74) is 111
+PASS baz(object, 38, 76) is 114
+PASS baz(object, 39, 78) is 117
+PASS baz(object, 40, 80) is 120
+PASS baz(object, 41, 82) is 123
+PASS baz(object, 42, 84) is 126
+PASS baz(object, 43, 86) is 129
+PASS baz(object, 44, 88) is 132
+PASS baz(object, 45, 90) is 135
+PASS baz(object, 46, 92) is 138
+PASS baz(object, 47, 94) is 141
+PASS baz(object, 48, 96) is 144
+PASS baz(object, 49, 98) is 147
+PASS baz(object, 50, 100) is 150
+PASS baz(object, 51, 102) is 153
+PASS baz(object, 52, 104) is 156
+PASS baz(object, 53, 106) is 159
+PASS baz(object, 54, 108) is 162
+PASS baz(object, 55, 110) is 165
+PASS baz(object, 56, 112) is 168
+PASS baz(object, 57, 114) is 171
+PASS baz(object, 58, 116) is 174
+PASS baz(object, 59, 118) is 177
+PASS baz(object, 60, 120) is 180
+PASS baz(object, 61, 122) is 183
+PASS baz(object, 62, 124) is 186
+PASS baz(object, 63, 126) is 189
+PASS baz(object, 64, 128) is 192
+PASS baz(object, 65, 130) is 195
+PASS baz(object, 66, 132) is 198
+PASS baz(object, 67, 134) is 201
+PASS baz(object, 68, 136) is 204
+PASS baz(object, 69, 138) is 207
+PASS baz(object, 70, 140) is 210
+PASS baz(object, 71, 142) is 213
+PASS baz(object, 72, 144) is 216
+PASS baz(object, 73, 146) is 219
+PASS baz(object, 74, 148) is 222
+PASS baz(object, 75, 150) is 225
+PASS baz(object, 76, 152) is 228
+PASS baz(object, 77, 154) is 231
+PASS baz(object, 78, 156) is 234
+PASS baz(object, 79, 158) is 237
+PASS baz(object, 80, 160) is 240
+PASS baz(object, 81, 162) is 243
+PASS baz(object, 82, 164) is 246
+PASS baz(object, 83, 166) is 249
+PASS baz(object, 84, 168) is 252
+PASS baz(object, 85, 170) is 255
+PASS baz(object, 86, 172) is 258
+PASS baz(object, 87, 174) is 261
+PASS baz(object, 88, 176) is 264
+PASS baz(object, 89, 178) is 267
+PASS baz(object, 90, 180) is 270
+PASS baz(object, 91, 182) is 273
+PASS baz(object, 92, 184) is 276
+PASS baz(object, 93, 186) is 279
+PASS baz(object, 94, 188) is 282
+PASS baz(object, 95, 190) is 285
+PASS baz(object, 96, 192) is 288
+PASS baz(object, 97, 194) is 291
+PASS baz(object, 98, 196) is 294
+PASS baz(object, 99, 198) is 297
+PASS baz(object, 100, 200) is 300
+PASS baz(object, 101, 202) is 303
+PASS baz(object, 102, 204) is 306
+PASS baz(object, 103, 206) is 309
+PASS baz(object, 104, 208) is 312
+PASS baz(object, 105, 210) is 315
+PASS baz(object, 106, 212) is 318
+PASS baz(object, 107, 214) is 321
+PASS baz(object, 108, 216) is 324
+PASS baz(object, 109, 218) is 327
+PASS baz(object, 110, 220) is 330
+PASS baz(object, 111, 222) is 333
+PASS baz(object, 112, 224) is 336
+PASS baz(object, 113, 226) is 339
+PASS baz(object, 114, 228) is 342
+PASS baz(object, 115, 230) is 345
+PASS baz(object, 116, 232) is 348
+PASS baz(object, 117, 234) is 351
+PASS baz(object, 118, 236) is 354
+PASS baz(object, 119, 238) is 357
+PASS baz(object, 120, 240) is 360
+PASS baz(object, 121, 242) is 363
+PASS baz(object, 122, 244) is 366
+PASS baz(object, 123, 246) is 369
+PASS baz(object, 124, 248) is 372
+PASS baz(object, 125, 250) is 375
+PASS baz(object, 126, 252) is 378
+PASS baz(object, 127, 254) is 381
+PASS baz(object, 128, 256) is 384
+PASS baz(object, 129, 258) is 387
+PASS baz(object, 130, 260) is 390
+PASS baz(object, 131, 262) is 393
+PASS baz(object, 132, 264) is 396
+PASS baz(object, 133, 266) is 399
+PASS baz(object, 134, 268) is 402
+PASS baz(object, 135, 270) is 405
+PASS baz(object, 136, 272) is 408
+PASS baz(object, 137, 274) is 411
+PASS baz(object, 138, 276) is 414
+PASS baz(object, 139, 278) is 417
+PASS baz(object, 140, 280) is 420
+PASS baz(object, 141, 282) is 423
+PASS baz(object, 142, 284) is 426
+PASS baz(object, 143, 286) is 429
+PASS baz(object, 144, 288) is 432
+PASS baz(object, 145, 290) is 435
+PASS baz(object, 146, 292) is 438
+PASS baz(object, 147, 294) is 441
+PASS baz(object, 148, 296) is 444
+PASS baz(object, 149, 298) is 447
+PASS baz(object, 150, 300) is 450
+PASS baz(object, 151, 302) is 453
+PASS baz(object, 152, 304) is 456
+PASS baz(object, 153, 306) is 459
+PASS baz(object, 154, 308) is 462
+PASS baz(object, 155, 310) is 465
+PASS baz(object, 156, 312) is 468
+PASS baz(object, 157, 314) is 471
+PASS baz(object, 158, 316) is 474
+PASS baz(object, 159, 318) is 477
+PASS baz(object, 160, 320) is 480
+PASS baz(object, 161, 322) is 483
+PASS baz(object, 162, 324) is 486
+PASS baz(object, 163, 326) is 489
+PASS baz(object, 164, 328) is 492
+PASS baz(object, 165, 330) is 495
+PASS baz(object, 166, 332) is 498
+PASS baz(object, 167, 334) is 501
+PASS baz(object, 168, 336) is 504
+PASS baz(object, 169, 338) is 507
+PASS baz(object, 170, 340) is 510
+PASS baz(object, 171, 342) is 513
+PASS baz(object, 172, 344) is 516
+PASS baz(object, 173, 346) is 519
+PASS baz(object, 174, 348) is 522
+PASS baz(object, 175, 350) is 525
+PASS baz(object, 176, 352) is 528
+PASS baz(object, 177, 354) is 531
+PASS baz(object, 178, 356) is 534
+PASS baz(object, 179, 358) is 537
+PASS baz(object, 180, 360) is 540
+PASS baz(object, 181, 362) is 543
+PASS baz(object, 182, 364) is 546
+PASS baz(object, 183, 366) is 549
+PASS baz(object, 184, 368) is 552
+PASS baz(object, 185, 370) is 555
+PASS baz(object, 186, 372) is 558
+PASS baz(object, 187, 374) is 561
+PASS baz(object, 188, 376) is 564
+PASS baz(object, 189, 378) is 567
+PASS baz(object, 190, 380) is 570
+PASS baz(object, 191, 382) is 573
+PASS baz(object, 192, 384) is 576
+PASS baz(object, 193, 386) is 579
+PASS baz(object, 194, 388) is 582
+PASS baz(object, 195, 390) is 585
+PASS baz(object, 196, 392) is 588
+PASS baz(object, 197, 394) is 591
+PASS baz(object, 198, 396) is 594
+PASS baz(object, 199, 398) is 597
+PASS baz(object, 200, 400) is 600
+PASS baz(object, 201, 402) is 603
+PASS baz(object, 202, 404) is 606
+PASS baz(object, 203, 406) is 609
+PASS baz(object, 204, 408) is 612
+PASS baz(object, 205, 410) is 615
+PASS baz(object, 206, 412) is 618
+PASS baz(object, 207, 414) is 621
+PASS baz(object, 208, 416) is 624
+PASS baz(object, 209, 418) is 627
+PASS baz(object, 210, 420) is 630
+PASS baz(object, 211, 422) is 633
+PASS baz(object, 212, 424) is 636
+PASS baz(object, 213, 426) is 639
+PASS baz(object, 214, 428) is 642
+PASS baz(object, 215, 430) is 645
+PASS baz(object, 216, 432) is 648
+PASS baz(object, 217, 434) is 651
+PASS baz(object, 218, 436) is 654
+PASS baz(object, 219, 438) is 657
+PASS baz(object, 220, 440) is 660
+PASS baz(object, 221, 442) is 663
+PASS baz(object, 222, 444) is 666
+PASS baz(object, 223, 446) is 669
+PASS baz(object, 224, 448) is 672
+PASS baz(object, 225, 450) is 675
+PASS baz(object, 226, 452) is 678
+PASS baz(object, 227, 454) is 681
+PASS baz(object, 228, 456) is 684
+PASS baz(object, 229, 458) is 687
+PASS baz(object, 230, 460) is 690
+PASS baz(object, 231, 462) is 693
+PASS baz(object, 232, 464) is 696
+PASS baz(object, 233, 466) is 699
+PASS baz(object, 234, 468) is 702
+PASS baz(object, 235, 470) is 705
+PASS baz(object, 236, 472) is 708
+PASS baz(object, 237, 474) is 711
+PASS baz(object, 238, 476) is 714
+PASS baz(object, 239, 478) is 717
+PASS baz(object, 240, 480) is 720
+PASS baz(object, 241, 482) is 723
+PASS baz(object, 242, 484) is 726
+PASS baz(object, 243, 486) is 729
+PASS baz(object, 244, 488) is 732
+PASS baz(object, 245, 490) is 735
+PASS baz(object, 246, 492) is 738
+PASS baz(object, 247, 494) is 741
+PASS baz(object, 248, 496) is 744
+PASS baz(object, 249, 498) is 747
+PASS baz(object, 250, 500) is 750
+PASS baz(object, 251, 502) is 753
+PASS baz(object, 252, 504) is 756
+PASS baz(object, 253, 506) is 759
+PASS baz(object, 254, 508) is 762
+PASS baz(object, 255, 510) is 765
+PASS baz(object, 256, 512) is 768
+PASS baz(object, 257, 514) is 771
+PASS baz(object, 258, 516) is 774
+PASS baz(object, 259, 518) is 777
+PASS baz(object, 260, 520) is 780
+PASS baz(object, 261, 522) is 783
+PASS baz(object, 262, 524) is 786
+PASS baz(object, 263, 526) is 789
+PASS baz(object, 264, 528) is 792
+PASS baz(object, 265, 530) is 795
+PASS baz(object, 266, 532) is 798
+PASS baz(object, 267, 534) is 801
+PASS baz(object, 268, 536) is 804
+PASS baz(object, 269, 538) is 807
+PASS baz(object, 270, 540) is 810
+PASS baz(object, 271, 542) is 813
+PASS baz(object, 272, 544) is 816
+PASS baz(object, 273, 546) is 819
+PASS baz(object, 274, 548) is 822
+PASS baz(object, 275, 550) is 825
+PASS baz(object, 276, 552) is 828
+PASS baz(object, 277, 554) is 831
+PASS baz(object, 278, 556) is 834
+PASS baz(object, 279, 558) is 837
+PASS baz(object, 280, 560) is 840
+PASS baz(object, 281, 562) is 843
+PASS baz(object, 282, 564) is 846
+PASS baz(object, 283, 566) is 849
+PASS baz(object, 284, 568) is 852
+PASS baz(object, 285, 570) is 855
+PASS baz(object, 286, 572) is 858
+PASS baz(object, 287, 574) is 861
+PASS baz(object, 288, 576) is 864
+PASS baz(object, 289, 578) is 867
+PASS baz(object, 290, 580) is 870
+PASS baz(object, 291, 582) is 873
+PASS baz(object, 292, 584) is 876
+PASS baz(object, 293, 586) is 879
+PASS baz(object, 294, 588) is 882
+PASS baz(object, 295, 590) is 885
+PASS baz(object, 296, 592) is 888
+PASS baz(object, 297, 594) is 891
+PASS baz(object, 298, 596) is 894
+PASS baz(object, 299, 598) is 897
+PASS baz(object, 300, 600) is 900
+PASS baz(object, 301, 602) is 903
+PASS baz(object, 302, 604) is 906
+PASS baz(object, 303, 606) is 909
+PASS baz(object, 304, 608) is 912
+PASS baz(object, 305, 610) is 915
+PASS baz(object, 306, 612) is 918
+PASS baz(object, 307, 614) is 921
+PASS baz(object, 308, 616) is 924
+PASS baz(object, 309, 618) is 927
+PASS baz(object, 310, 620) is 930
+PASS baz(object, 311, 622) is 933
+PASS baz(object, 312, 624) is 936
+PASS baz(object, 313, 626) is 939
+PASS baz(object, 314, 628) is 942
+PASS baz(object, 315, 630) is 945
+PASS baz(object, 316, 632) is 948
+PASS baz(object, 317, 634) is 951
+PASS baz(object, 318, 636) is 954
+PASS baz(object, 319, 638) is 957
+PASS baz(object, 320, 640) is 960
+PASS baz(object, 321, 642) is 963
+PASS baz(object, 322, 644) is 966
+PASS baz(object, 323, 646) is 969
+PASS baz(object, 324, 648) is 972
+PASS baz(object, 325, 650) is 975
+PASS baz(object, 326, 652) is 978
+PASS baz(object, 327, 654) is 981
+PASS baz(object, 328, 656) is 984
+PASS baz(object, 329, 658) is 987
+PASS baz(object, 330, 660) is 990
+PASS baz(object, 331, 662) is 993
+PASS baz(object, 332, 664) is 996
+PASS baz(object, 333, 666) is 999
+PASS baz(object, 334, 668) is 1002
+PASS baz(object, 335, 670) is 1005
+PASS baz(object, 336, 672) is 1008
+PASS baz(object, 337, 674) is 1011
+PASS baz(object, 338, 676) is 1014
+PASS baz(object, 339, 678) is 1017
+PASS baz(object, 340, 680) is 1020
+PASS baz(object, 341, 682) is 1023
+PASS baz(object, 342, 684) is 1026
+PASS baz(object, 343, 686) is 1029
+PASS baz(object, 344, 688) is 1032
+PASS baz(object, 345, 690) is 1035
+PASS baz(object, 346, 692) is 1038
+PASS baz(object, 347, 694) is 1041
+PASS baz(object, 348, 696) is 1044
+PASS baz(object, 349, 698) is 1047
+PASS baz(object, 350, 700) is 1050
+PASS baz(object, 351, 702) is 1053
+PASS baz(object, 352, 704) is 1056
+PASS baz(object, 353, 706) is 1059
+PASS baz(object, 354, 708) is 1062
+PASS baz(object, 355, 710) is 1065
+PASS baz(object, 356, 712) is 1068
+PASS baz(object, 357, 714) is 1071
+PASS baz(object, 358, 716) is 1074
+PASS baz(object, 359, 718) is 1077
+PASS baz(object, 360, 720) is 1080
+PASS baz(object, 361, 722) is 1083
+PASS baz(object, 362, 724) is 1086
+PASS baz(object, 363, 726) is 1089
+PASS baz(object, 364, 728) is 1092
+PASS baz(object, 365, 730) is 1095
+PASS baz(object, 366, 732) is 1098
+PASS baz(object, 367, 734) is 1101
+PASS baz(object, 368, 736) is 1104
+PASS baz(object, 369, 738) is 1107
+PASS baz(object, 370, 740) is 1110
+PASS baz(object, 371, 742) is 1113
+PASS baz(object, 372, 744) is 1116
+PASS baz(object, 373, 746) is 1119
+PASS baz(object, 374, 748) is 1122
+PASS baz(object, 375, 750) is 1125
+PASS baz(object, 376, 752) is 1128
+PASS baz(object, 377, 754) is 1131
+PASS baz(object, 378, 756) is 1134
+PASS baz(object, 379, 758) is 1137
+PASS baz(object, 380, 760) is 1140
+PASS baz(object, 381, 762) is 1143
+PASS baz(object, 382, 764) is 1146
+PASS baz(object, 383, 766) is 1149
+PASS baz(object, 384, 768) is 1152
+PASS baz(object, 385, 770) is 1155
+PASS baz(object, 386, 772) is 1158
+PASS baz(object, 387, 774) is 1161
+PASS baz(object, 388, 776) is 1164
+PASS baz(object, 389, 778) is 1167
+PASS baz(object, 390, 780) is 1170
+PASS baz(object, 391, 782) is 1173
+PASS baz(object, 392, 784) is 1176
+PASS baz(object, 393, 786) is 1179
+PASS baz(object, 394, 788) is 1182
+PASS baz(object, 395, 790) is 1185
+PASS baz(object, 396, 792) is 1188
+PASS baz(object, 397, 794) is 1191
+PASS baz(object, 398, 796) is 1194
+PASS baz(object, 399, 798) is 1197
+PASS baz(object, 400, 800) is 1200
+PASS baz(object, 401, 802) is 1203
+PASS baz(object, 402, 804) is 1206
+PASS baz(object, 403, 806) is 1209
+PASS baz(object, 404, 808) is 1212
+PASS baz(object, 405, 810) is 1215
+PASS baz(object, 406, 812) is 1218
+PASS baz(object, 407, 814) is 1221
+PASS baz(object, 408, 816) is 1224
+PASS baz(object, 409, 818) is 1227
+PASS baz(object, 410, 820) is 1230
+PASS baz(object, 411, 822) is 1233
+PASS baz(object, 412, 824) is 1236
+PASS baz(object, 413, 826) is 1239
+PASS baz(object, 414, 828) is 1242
+PASS baz(object, 415, 830) is 1245
+PASS baz(object, 416, 832) is 1248
+PASS baz(object, 417, 834) is 1251
+PASS baz(object, 418, 836) is 1254
+PASS baz(object, 419, 838) is 1257
+PASS baz(object, 420, 840) is 1260
+PASS baz(object, 421, 842) is 1263
+PASS baz(object, 422, 844) is 1266
+PASS baz(object, 423, 846) is 1269
+PASS baz(object, 424, 848) is 1272
+PASS baz(object, 425, 850) is 1275
+PASS baz(object, 426, 852) is 1278
+PASS baz(object, 427, 854) is 1281
+PASS baz(object, 428, 856) is 1284
+PASS baz(object, 429, 858) is 1287
+PASS baz(object, 430, 860) is 1290
+PASS baz(object, 431, 862) is 1293
+PASS baz(object, 432, 864) is 1296
+PASS baz(object, 433, 866) is 1299
+PASS baz(object, 434, 868) is 1302
+PASS baz(object, 435, 870) is 1305
+PASS baz(object, 436, 872) is 1308
+PASS baz(object, 437, 874) is 1311
+PASS baz(object, 438, 876) is 1314
+PASS baz(object, 439, 878) is 1317
+PASS baz(object, 440, 880) is 1320
+PASS baz(object, 441, 882) is 1323
+PASS baz(object, 442, 884) is 1326
+PASS baz(object, 443, 886) is 1329
+PASS baz(object, 444, 888) is 1332
+PASS baz(object, 445, 890) is 1335
+PASS baz(object, 446, 892) is 1338
+PASS baz(object, 447, 894) is 1341
+PASS baz(object, 448, 896) is 1344
+PASS baz(object, 449, 898) is 1347
+PASS baz(object, 450, 900) is 1350
+PASS baz(object, 451, 902) is 1353
+PASS baz(object, 452, 904) is 1356
+PASS baz(object, 453, 906) is 1359
+PASS baz(object, 454, 908) is 1362
+PASS baz(object, 455, 910) is 1365
+PASS baz(object, 456, 912) is 1368
+PASS baz(object, 457, 914) is 1371
+PASS baz(object, 458, 916) is 1374
+PASS baz(object, 459, 918) is 1377
+PASS baz(object, 460, 920) is 1380
+PASS baz(object, 461, 922) is 1383
+PASS baz(object, 462, 924) is 1386
+PASS baz(object, 463, 926) is 1389
+PASS baz(object, 464, 928) is 1392
+PASS baz(object, 465, 930) is 1395
+PASS baz(object, 466, 932) is 1398
+PASS baz(object, 467, 934) is 1401
+PASS baz(object, 468, 936) is 1404
+PASS baz(object, 469, 938) is 1407
+PASS baz(object, 470, 940) is 1410
+PASS baz(object, 471, 942) is 1413
+PASS baz(object, 472, 944) is 1416
+PASS baz(object, 473, 946) is 1419
+PASS baz(object, 474, 948) is 1422
+PASS baz(object, 475, 950) is 1425
+PASS baz(object, 476, 952) is 1428
+PASS baz(object, 477, 954) is 1431
+PASS baz(object, 478, 956) is 1434
+PASS baz(object, 479, 958) is 1437
+PASS baz(object, 480, 960) is 1440
+PASS baz(object, 481, 962) is 1443
+PASS baz(object, 482, 964) is 1446
+PASS baz(object, 483, 966) is 1449
+PASS baz(object, 484, 968) is 1452
+PASS baz(object, 485, 970) is 1455
+PASS baz(object, 486, 972) is 1458
+PASS baz(object, 487, 974) is 1461
+PASS baz(object, 488, 976) is 1464
+PASS baz(object, 489, 978) is 1467
+PASS baz(object, 490, 980) is 1470
+PASS baz(object, 491, 982) is 1473
+PASS baz(object, 492, 984) is 1476
+PASS baz(object, 493, 986) is 1479
+PASS baz(object, 494, 988) is 1482
+PASS baz(object, 495, 990) is 1485
+PASS baz(object, 496, 992) is 1488
+PASS baz(object, 497, 994) is 1491
+PASS baz(object, 498, 996) is 1494
+PASS baz(object, 499, 998) is 1497
+PASS baz(object, 500, 1000) is 1500
+PASS baz(object, 501, 1002) is 1503
+PASS baz(object, 502, 1004) is 1506
+PASS baz(object, 503, 1006) is 1509
+PASS baz(object, 504, 1008) is 1512
+PASS baz(object, 505, 1010) is 1515
+PASS baz(object, 506, 1012) is 1518
+PASS baz(object, 507, 1014) is 1521
+PASS baz(object, 508, 1016) is 1524
+PASS baz(object, 509, 1018) is 1527
+PASS baz(object, 510, 1020) is 1530
+PASS baz(object, 511, 1022) is 1533
+PASS baz(object, 512, 1024) is 1536
+PASS baz(object, 513, 1026) is 1539
+PASS baz(object, 514, 1028) is 1542
+PASS baz(object, 515, 1030) is 1545
+PASS baz(object, 516, 1032) is 1548
+PASS baz(object, 517, 1034) is 1551
+PASS baz(object, 518, 1036) is 1554
+PASS baz(object, 519, 1038) is 1557
+PASS baz(object, 520, 1040) is 1560
+PASS baz(object, 521, 1042) is 1563
+PASS baz(object, 522, 1044) is 1566
+PASS baz(object, 523, 1046) is 1569
+PASS baz(object, 524, 1048) is 1572
+PASS baz(object, 525, 1050) is 1575
+PASS baz(object, 526, 1052) is 1578
+PASS baz(object, 527, 1054) is 1581
+PASS baz(object, 528, 1056) is 1584
+PASS baz(object, 529, 1058) is 1587
+PASS baz(object, 530, 1060) is 1590
+PASS baz(object, 531, 1062) is 1593
+PASS baz(object, 532, 1064) is 1596
+PASS baz(object, 533, 1066) is 1599
+PASS baz(object, 534, 1068) is 1602
+PASS baz(object, 535, 1070) is 1605
+PASS baz(object, 536, 1072) is 1608
+PASS baz(object, 537, 1074) is 1611
+PASS baz(object, 538, 1076) is 1614
+PASS baz(object, 539, 1078) is 1617
+PASS baz(object, 540, 1080) is 1620
+PASS baz(object, 541, 1082) is 1623
+PASS baz(object, 542, 1084) is 1626
+PASS baz(object, 543, 1086) is 1629
+PASS baz(object, 544, 1088) is 1632
+PASS baz(object, 545, 1090) is 1635
+PASS baz(object, 546, 1092) is 1638
+PASS baz(object, 547, 1094) is 1641
+PASS baz(object, 548, 1096) is 1644
+PASS baz(object, 549, 1098) is 1647
+PASS baz(object, 550, 1100) is 1650
+PASS baz(object, 551, 1102) is 1653
+PASS baz(object, 552, 1104) is 1656
+PASS baz(object, 553, 1106) is 1659
+PASS baz(object, 554, 1108) is 1662
+PASS baz(object, 555, 1110) is 1665
+PASS baz(object, 556, 1112) is 1668
+PASS baz(object, 557, 1114) is 1671
+PASS baz(object, 558, 1116) is 1674
+PASS baz(object, 559, 1118) is 1677
+PASS baz(object, 560, 1120) is 1680
+PASS baz(object, 561, 1122) is 1683
+PASS baz(object, 562, 1124) is 1686
+PASS baz(object, 563, 1126) is 1689
+PASS baz(object, 564, 1128) is 1692
+PASS baz(object, 565, 1130) is 1695
+PASS baz(object, 566, 1132) is 1698
+PASS baz(object, 567, 1134) is 1701
+PASS baz(object, 568, 1136) is 1704
+PASS baz(object, 569, 1138) is 1707
+PASS baz(object, 570, 1140) is 1710
+PASS baz(object, 571, 1142) is 1713
+PASS baz(object, 572, 1144) is 1716
+PASS baz(object, 573, 1146) is 1719
+PASS baz(object, 574, 1148) is 1722
+PASS baz(object, 575, 1150) is 1725
+PASS baz(object, 576, 1152) is 1728
+PASS baz(object, 577, 1154) is 1731
+PASS baz(object, 578, 1156) is 1734
+PASS baz(object, 579, 1158) is 1737
+PASS baz(object, 580, 1160) is 1740
+PASS baz(object, 581, 1162) is 1743
+PASS baz(object, 582, 1164) is 1746
+PASS baz(object, 583, 1166) is 1749
+PASS baz(object, 584, 1168) is 1752
+PASS baz(object, 585, 1170) is 1755
+PASS baz(object, 586, 1172) is 1758
+PASS baz(object, 587, 1174) is 1761
+PASS baz(object, 588, 1176) is 1764
+PASS baz(object, 589, 1178) is 1767
+PASS baz(object, 590, 1180) is 1770
+PASS baz(object, 591, 1182) is 1773
+PASS baz(object, 592, 1184) is 1776
+PASS baz(object, 593, 1186) is 1779
+PASS baz(object, 594, 1188) is 1782
+PASS baz(object, 595, 1190) is 1785
+PASS baz(object, 596, 1192) is 1788
+PASS baz(object, 597, 1194) is 1791
+PASS baz(object, 598, 1196) is 1794
+PASS baz(object, 599, 1198) is 1797
+PASS baz(object, 600, 1200) is 1842
+PASS baz(object, 601, 1202) is 1845
+PASS baz(object, 602, 1204) is 1848
+PASS baz(object, 603, 1206) is 1851
+PASS baz(object, 604, 1208) is 1854
+PASS baz(object, 605, 1210) is 1857
+PASS baz(object, 606, 1212) is 1860
+PASS baz(object, 607, 1214) is 1863
+PASS baz(object, 608, 1216) is 1866
+PASS baz(object, 609, 1218) is 1869
+PASS baz(object, 610, 1220) is 1872
+PASS baz(object, 611, 1222) is 1875
+PASS baz(object, 612, 1224) is 1878
+PASS baz(object, 613, 1226) is 1881
+PASS baz(object, 614, 1228) is 1884
+PASS baz(object, 615, 1230) is 1887
+PASS baz(object, 616, 1232) is 1890
+PASS baz(object, 617, 1234) is 1893
+PASS baz(object, 618, 1236) is 1896
+PASS baz(object, 619, 1238) is 1899
+PASS baz(object, 620, 1240) is 1902
+PASS baz(object, 621, 1242) is 1905
+PASS baz(object, 622, 1244) is 1908
+PASS baz(object, 623, 1246) is 1911
+PASS baz(object, 624, 1248) is 1914
+PASS baz(object, 625, 1250) is 1917
+PASS baz(object, 626, 1252) is 1920
+PASS baz(object, 627, 1254) is 1923
+PASS baz(object, 628, 1256) is 1926
+PASS baz(object, 629, 1258) is 1929
+PASS baz(object, 630, 1260) is 1932
+PASS baz(object, 631, 1262) is 1935
+PASS baz(object, 632, 1264) is 1938
+PASS baz(object, 633, 1266) is 1941
+PASS baz(object, 634, 1268) is 1944
+PASS baz(object, 635, 1270) is 1947
+PASS baz(object, 636, 1272) is 1950
+PASS baz(object, 637, 1274) is 1953
+PASS baz(object, 638, 1276) is 1956
+PASS baz(object, 639, 1278) is 1959
+PASS baz(object, 640, 1280) is 1962
+PASS baz(object, 641, 1282) is 1965
+PASS baz(object, 642, 1284) is 1968
+PASS baz(object, 643, 1286) is 1971
+PASS baz(object, 644, 1288) is 1974
+PASS baz(object, 645, 1290) is 1977
+PASS baz(object, 646, 1292) is 1980
+PASS baz(object, 647, 1294) is 1983
+PASS baz(object, 648, 1296) is 1986
+PASS baz(object, 649, 1298) is 1989
+PASS baz(object, 650, 1300) is 1992
+PASS baz(object, 651, 1302) is 1995
+PASS baz(object, 652, 1304) is 1998
+PASS baz(object, 653, 1306) is 2001
+PASS baz(object, 654, 1308) is 2004
+PASS baz(object, 655, 1310) is 2007
+PASS baz(object, 656, 1312) is 2010
+PASS baz(object, 657, 1314) is 2013
+PASS baz(object, 658, 1316) is 2016
+PASS baz(object, 659, 1318) is 2019
+PASS baz(object, 660, 1320) is 2022
+PASS baz(object, 661, 1322) is 2025
+PASS baz(object, 662, 1324) is 2028
+PASS baz(object, 663, 1326) is 2031
+PASS baz(object, 664, 1328) is 2034
+PASS baz(object, 665, 1330) is 2037
+PASS baz(object, 666, 1332) is 2040
+PASS baz(object, 667, 1334) is 2043
+PASS baz(object, 668, 1336) is 2046
+PASS baz(object, 669, 1338) is 2049
+PASS baz(object, 670, 1340) is 2052
+PASS baz(object, 671, 1342) is 2055
+PASS baz(object, 672, 1344) is 2058
+PASS baz(object, 673, 1346) is 2061
+PASS baz(object, 674, 1348) is 2064
+PASS baz(object, 675, 1350) is 2067
+PASS baz(object, 676, 1352) is 2070
+PASS baz(object, 677, 1354) is 2073
+PASS baz(object, 678, 1356) is 2076
+PASS baz(object, 679, 1358) is 2079
+PASS baz(object, 680, 1360) is 2082
+PASS baz(object, 681, 1362) is 2085
+PASS baz(object, 682, 1364) is 2088
+PASS baz(object, 683, 1366) is 2091
+PASS baz(object, 684, 1368) is 2094
+PASS baz(object, 685, 1370) is 2097
+PASS baz(object, 686, 1372) is 2100
+PASS baz(object, 687, 1374) is 2103
+PASS baz(object, 688, 1376) is 2106
+PASS baz(object, 689, 1378) is 2109
+PASS baz(object, 690, 1380) is 2112
+PASS baz(object, 691, 1382) is 2115
+PASS baz(object, 692, 1384) is 2118
+PASS baz(object, 693, 1386) is 2121
+PASS baz(object, 694, 1388) is 2124
+PASS baz(object, 695, 1390) is 2127
+PASS baz(object, 696, 1392) is 2130
+PASS baz(object, 697, 1394) is 2133
+PASS baz(object, 698, 1396) is 2136
+PASS baz(object, 699, 1398) is 2139
+PASS baz(object, 700, 1400) is 2142
+PASS baz(object, 701, 1402) is 2145
+PASS baz(object, 702, 1404) is 2148
+PASS baz(object, 703, 1406) is 2151
+PASS baz(object, 704, 1408) is 2154
+PASS baz(object, 705, 1410) is 2157
+PASS baz(object, 706, 1412) is 2160
+PASS baz(object, 707, 1414) is 2163
+PASS baz(object, 708, 1416) is 2166
+PASS baz(object, 709, 1418) is 2169
+PASS baz(object, 710, 1420) is 2172
+PASS baz(object, 711, 1422) is 2175
+PASS baz(object, 712, 1424) is 2178
+PASS baz(object, 713, 1426) is 2181
+PASS baz(object, 714, 1428) is 2184
+PASS baz(object, 715, 1430) is 2187
+PASS baz(object, 716, 1432) is 2190
+PASS baz(object, 717, 1434) is 2193
+PASS baz(object, 718, 1436) is 2196
+PASS baz(object, 719, 1438) is 2199
+PASS baz(object, 720, 1440) is 2202
+PASS baz(object, 721, 1442) is 2205
+PASS baz(object, 722, 1444) is 2208
+PASS baz(object, 723, 1446) is 2211
+PASS baz(object, 724, 1448) is 2214
+PASS baz(object, 725, 1450) is 2217
+PASS baz(object, 726, 1452) is 2220
+PASS baz(object, 727, 1454) is 2223
+PASS baz(object, 728, 1456) is 2226
+PASS baz(object, 729, 1458) is 2229
+PASS baz(object, 730, 1460) is 2232
+PASS baz(object, 731, 1462) is 2235
+PASS baz(object, 732, 1464) is 2238
+PASS baz(object, 733, 1466) is 2241
+PASS baz(object, 734, 1468) is 2244
+PASS baz(object, 735, 1470) is 2247
+PASS baz(object, 736, 1472) is 2250
+PASS baz(object, 737, 1474) is 2253
+PASS baz(object, 738, 1476) is 2256
+PASS baz(object, 739, 1478) is 2259
+PASS baz(object, 740, 1480) is 2262
+PASS baz(object, 741, 1482) is 2265
+PASS baz(object, 742, 1484) is 2268
+PASS baz(object, 743, 1486) is 2271
+PASS baz(object, 744, 1488) is 2274
+PASS baz(object, 745, 1490) is 2277
+PASS baz(object, 746, 1492) is 2280
+PASS baz(object, 747, 1494) is 2283
+PASS baz(object, 748, 1496) is 2286
+PASS baz(object, 749, 1498) is 2289
+PASS baz(object, 750, 1500) is 2292
+PASS baz(object, 751, 1502) is 2295
+PASS baz(object, 752, 1504) is 2298
+PASS baz(object, 753, 1506) is 2301
+PASS baz(object, 754, 1508) is 2304
+PASS baz(object, 755, 1510) is 2307
+PASS baz(object, 756, 1512) is 2310
+PASS baz(object, 757, 1514) is 2313
+PASS baz(object, 758, 1516) is 2316
+PASS baz(object, 759, 1518) is 2319
+PASS baz(object, 760, 1520) is 2322
+PASS baz(object, 761, 1522) is 2325
+PASS baz(object, 762, 1524) is 2328
+PASS baz(object, 763, 1526) is 2331
+PASS baz(object, 764, 1528) is 2334
+PASS baz(object, 765, 1530) is 2337
+PASS baz(object, 766, 1532) is 2340
+PASS baz(object, 767, 1534) is 2343
+PASS baz(object, 768, 1536) is 2346
+PASS baz(object, 769, 1538) is 2349
+PASS baz(object, 770, 1540) is 2352
+PASS baz(object, 771, 1542) is 2355
+PASS baz(object, 772, 1544) is 2358
+PASS baz(object, 773, 1546) is 2361
+PASS baz(object, 774, 1548) is 2364
+PASS baz(object, 775, 1550) is 2367
+PASS baz(object, 776, 1552) is 2370
+PASS baz(object, 777, 1554) is 2373
+PASS baz(object, 778, 1556) is 2376
+PASS baz(object, 779, 1558) is 2379
+PASS baz(object, 780, 1560) is 2382
+PASS baz(object, 781, 1562) is 2385
+PASS baz(object, 782, 1564) is 2388
+PASS baz(object, 783, 1566) is 2391
+PASS baz(object, 784, 1568) is 2394
+PASS baz(object, 785, 1570) is 2397
+PASS baz(object, 786, 1572) is 2400
+PASS baz(object, 787, 1574) is 2403
+PASS baz(object, 788, 1576) is 2406
+PASS baz(object, 789, 1578) is 2409
+PASS baz(object, 790, 1580) is 2412
+PASS baz(object, 791, 1582) is 2415
+PASS baz(object, 792, 1584) is 2418
+PASS baz(object, 793, 1586) is 2421
+PASS baz(object, 794, 1588) is 2424
+PASS baz(object, 795, 1590) is 2427
+PASS baz(object, 796, 1592) is 2430
+PASS baz(object, 797, 1594) is 2433
+PASS baz(object, 798, 1596) is 2436
+PASS baz(object, 799, 1598) is 2439
+PASS baz(object, 800, 1600) is 2442
+PASS baz(object, 801, 1602) is 2445
+PASS baz(object, 802, 1604) is 2448
+PASS baz(object, 803, 1606) is 2451
+PASS baz(object, 804, 1608) is 2454
+PASS baz(object, 805, 1610) is 2457
+PASS baz(object, 806, 1612) is 2460
+PASS baz(object, 807, 1614) is 2463
+PASS baz(object, 808, 1616) is 2466
+PASS baz(object, 809, 1618) is 2469
+PASS baz(object, 810, 1620) is 2472
+PASS baz(object, 811, 1622) is 2475
+PASS baz(object, 812, 1624) is 2478
+PASS baz(object, 813, 1626) is 2481
+PASS baz(object, 814, 1628) is 2484
+PASS baz(object, 815, 1630) is 2487
+PASS baz(object, 816, 1632) is 2490
+PASS baz(object, 817, 1634) is 2493
+PASS baz(object, 818, 1636) is 2496
+PASS baz(object, 819, 1638) is 2499
+PASS baz(object, 820, 1640) is 2502
+PASS baz(object, 821, 1642) is 2505
+PASS baz(object, 822, 1644) is 2508
+PASS baz(object, 823, 1646) is 2511
+PASS baz(object, 824, 1648) is 2514
+PASS baz(object, 825, 1650) is 2517
+PASS baz(object, 826, 1652) is 2520
+PASS baz(object, 827, 1654) is 2523
+PASS baz(object, 828, 1656) is 2526
+PASS baz(object, 829, 1658) is 2529
+PASS baz(object, 830, 1660) is 2532
+PASS baz(object, 831, 1662) is 2535
+PASS baz(object, 832, 1664) is 2538
+PASS baz(object, 833, 1666) is 2541
+PASS baz(object, 834, 1668) is 2544
+PASS baz(object, 835, 1670) is 2547
+PASS baz(object, 836, 1672) is 2550
+PASS baz(object, 837, 1674) is 2553
+PASS baz(object, 838, 1676) is 2556
+PASS baz(object, 839, 1678) is 2559
+PASS baz(object, 840, 1680) is 2562
+PASS baz(object, 841, 1682) is 2565
+PASS baz(object, 842, 1684) is 2568
+PASS baz(object, 843, 1686) is 2571
+PASS baz(object, 844, 1688) is 2574
+PASS baz(object, 845, 1690) is 2577
+PASS baz(object, 846, 1692) is 2580
+PASS baz(object, 847, 1694) is 2583
+PASS baz(object, 848, 1696) is 2586
+PASS baz(object, 849, 1698) is 2589
+PASS baz(object, 850, 1700) is 2592
+PASS baz(object, 851, 1702) is 2595
+PASS baz(object, 852, 1704) is 2598
+PASS baz(object, 853, 1706) is 2601
+PASS baz(object, 854, 1708) is 2604
+PASS baz(object, 855, 1710) is 2607
+PASS baz(object, 856, 1712) is 2610
+PASS baz(object, 857, 1714) is 2613
+PASS baz(object, 858, 1716) is 2616
+PASS baz(object, 859, 1718) is 2619
+PASS baz(object, 860, 1720) is 2622
+PASS baz(object, 861, 1722) is 2625
+PASS baz(object, 862, 1724) is 2628
+PASS baz(object, 863, 1726) is 2631
+PASS baz(object, 864, 1728) is 2634
+PASS baz(object, 865, 1730) is 2637
+PASS baz(object, 866, 1732) is 2640
+PASS baz(object, 867, 1734) is 2643
+PASS baz(object, 868, 1736) is 2646
+PASS baz(object, 869, 1738) is 2649
+PASS baz(object, 870, 1740) is 2652
+PASS baz(object, 871, 1742) is 2655
+PASS baz(object, 872, 1744) is 2658
+PASS baz(object, 873, 1746) is 2661
+PASS baz(object, 874, 1748) is 2664
+PASS baz(object, 875, 1750) is 2667
+PASS baz(object, 876, 1752) is 2670
+PASS baz(object, 877, 1754) is 2673
+PASS baz(object, 878, 1756) is 2676
+PASS baz(object, 879, 1758) is 2679
+PASS baz(object, 880, 1760) is 2682
+PASS baz(object, 881, 1762) is 2685
+PASS baz(object, 882, 1764) is 2688
+PASS baz(object, 883, 1766) is 2691
+PASS baz(object, 884, 1768) is 2694
+PASS baz(object, 885, 1770) is 2697
+PASS baz(object, 886, 1772) is 2700
+PASS baz(object, 887, 1774) is 2703
+PASS baz(object, 888, 1776) is 2706
+PASS baz(object, 889, 1778) is 2709
+PASS baz(object, 890, 1780) is 2712
+PASS baz(object, 891, 1782) is 2715
+PASS baz(object, 892, 1784) is 2718
+PASS baz(object, 893, 1786) is 2721
+PASS baz(object, 894, 1788) is 2724
+PASS baz(object, 895, 1790) is 2727
+PASS baz(object, 896, 1792) is 2730
+PASS baz(object, 897, 1794) is 2733
+PASS baz(object, 898, 1796) is 2736
+PASS baz(object, 899, 1798) is 2739
+PASS baz(object, 900, 1800) is 2742
+PASS baz(object, 901, 1802) is 2745
+PASS baz(object, 902, 1804) is 2748
+PASS baz(object, 903, 1806) is 2751
+PASS baz(object, 904, 1808) is 2754
+PASS baz(object, 905, 1810) is 2757
+PASS baz(object, 906, 1812) is 2760
+PASS baz(object, 907, 1814) is 2763
+PASS baz(object, 908, 1816) is 2766
+PASS baz(object, 909, 1818) is 2769
+PASS baz(object, 910, 1820) is 2772
+PASS baz(object, 911, 1822) is 2775
+PASS baz(object, 912, 1824) is 2778
+PASS baz(object, 913, 1826) is 2781
+PASS baz(object, 914, 1828) is 2784
+PASS baz(object, 915, 1830) is 2787
+PASS baz(object, 916, 1832) is 2790
+PASS baz(object, 917, 1834) is 2793
+PASS baz(object, 918, 1836) is 2796
+PASS baz(object, 919, 1838) is 2799
+PASS baz(object, 920, 1840) is 2802
+PASS baz(object, 921, 1842) is 2805
+PASS baz(object, 922, 1844) is 2808
+PASS baz(object, 923, 1846) is 2811
+PASS baz(object, 924, 1848) is 2814
+PASS baz(object, 925, 1850) is 2817
+PASS baz(object, 926, 1852) is 2820
+PASS baz(object, 927, 1854) is 2823
+PASS baz(object, 928, 1856) is 2826
+PASS baz(object, 929, 1858) is 2829
+PASS baz(object, 930, 1860) is 2832
+PASS baz(object, 931, 1862) is 2835
+PASS baz(object, 932, 1864) is 2838
+PASS baz(object, 933, 1866) is 2841
+PASS baz(object, 934, 1868) is 2844
+PASS baz(object, 935, 1870) is 2847
+PASS baz(object, 936, 1872) is 2850
+PASS baz(object, 937, 1874) is 2853
+PASS baz(object, 938, 1876) is 2856
+PASS baz(object, 939, 1878) is 2859
+PASS baz(object, 940, 1880) is 2862
+PASS baz(object, 941, 1882) is 2865
+PASS baz(object, 942, 1884) is 2868
+PASS baz(object, 943, 1886) is 2871
+PASS baz(object, 944, 1888) is 2874
+PASS baz(object, 945, 1890) is 2877
+PASS baz(object, 946, 1892) is 2880
+PASS baz(object, 947, 1894) is 2883
+PASS baz(object, 948, 1896) is 2886
+PASS baz(object, 949, 1898) is 2889
+PASS baz(object, 950, 1900) is 2892
+PASS baz(object, 951, 1902) is 2895
+PASS baz(object, 952, 1904) is 2898
+PASS baz(object, 953, 1906) is 2901
+PASS baz(object, 954, 1908) is 2904
+PASS baz(object, 955, 1910) is 2907
+PASS baz(object, 956, 1912) is 2910
+PASS baz(object, 957, 1914) is 2913
+PASS baz(object, 958, 1916) is 2916
+PASS baz(object, 959, 1918) is 2919
+PASS baz(object, 960, 1920) is 2922
+PASS baz(object, 961, 1922) is 2925
+PASS baz(object, 962, 1924) is 2928
+PASS baz(object, 963, 1926) is 2931
+PASS baz(object, 964, 1928) is 2934
+PASS baz(object, 965, 1930) is 2937
+PASS baz(object, 966, 1932) is 2940
+PASS baz(object, 967, 1934) is 2943
+PASS baz(object, 968, 1936) is 2946
+PASS baz(object, 969, 1938) is 2949
+PASS baz(object, 970, 1940) is 2952
+PASS baz(object, 971, 1942) is 2955
+PASS baz(object, 972, 1944) is 2958
+PASS baz(object, 973, 1946) is 2961
+PASS baz(object, 974, 1948) is 2964
+PASS baz(object, 975, 1950) is 2967
+PASS baz(object, 976, 1952) is 2970
+PASS baz(object, 977, 1954) is 2973
+PASS baz(object, 978, 1956) is 2976
+PASS baz(object, 979, 1958) is 2979
+PASS baz(object, 980, 1960) is 2982
+PASS baz(object, 981, 1962) is 2985
+PASS baz(object, 982, 1964) is 2988
+PASS baz(object, 983, 1966) is 2991
+PASS baz(object, 984, 1968) is 2994
+PASS baz(object, 985, 1970) is 2997
+PASS baz(object, 986, 1972) is 3000
+PASS baz(object, 987, 1974) is 3003
+PASS baz(object, 988, 1976) is 3006
+PASS baz(object, 989, 1978) is 3009
+PASS baz(object, 990, 1980) is 3012
+PASS baz(object, 991, 1982) is 3015
+PASS baz(object, 992, 1984) is 3018
+PASS baz(object, 993, 1986) is 3021
+PASS baz(object, 994, 1988) is 3024
+PASS baz(object, 995, 1990) is 3027
+PASS baz(object, 996, 1992) is 3030
+PASS baz(object, 997, 1994) is 3033
+PASS baz(object, 998, 1996) is 3036
+PASS baz(object, 999, 1998) is 3039
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-inline-unused-this-method-check.js b/test/webkit/dfg-inline-unused-this-method-check.js
new file mode 100644 (file)
index 0000000..929592e
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining a function that does not use this does not result in this being lost entirely, if we succeed in doing method check optimizations."
+);
+
+function foo(a, b) {
+    return a + b;
+}
+
+function bar(a, b) {
+    return this.f + a + b;
+}
+
+function baz(o, a, b) {
+    return o.stuff(a, b);
+}
+
+var functionToCall = foo;
+var offset = 0;
+for (var i = 0; i < 1000; ++i) {
+    if (i == 600) {
+        functionToCall = bar;
+        offset = 42;
+    }
+
+    var object = {};
+    object.stuff = functionToCall;
+    object.f = 42;
+
+    shouldBe("baz(object, " + i + ", " + (i * 2) + ")", "" + (offset + i + i * 2));
+}
+
diff --git a/test/webkit/dfg-inline-unused-this.js b/test/webkit/dfg-inline-unused-this.js
new file mode 100644 (file)
index 0000000..5983d72
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that inlining a function that does not use this does not result in this being lost entirely."
+);
+
+function foo(a, b) {
+    return a + b;
+}
+
+function bar(a, b) {
+    return this.f + a + b;
+}
+
+function baz(o, a, b) {
+    return o.stuff(a, b);
+}
+
+var functionToCall = foo;
+var offset = 0;
+for (var i = 0; i < 1000; ++i) {
+    if (i == 600) {
+        functionToCall = bar;
+        offset = 42;
+    }
+
+    // Create some bizzare object to prevent method_check optimizations, since those will result in
+    // a failure while the function is still live.
+    var object = {};
+    object["a" + i] = i;
+    object.stuff = functionToCall;
+    object.f = 42;
+
+    shouldBe("baz(object, " + i + ", " + (i * 2) + ")", "" + (offset + i + i * 2));
+}
+
diff --git a/test/webkit/dfg-int-overflow-in-loop-expected.txt b/test/webkit/dfg-int-overflow-in-loop-expected.txt
new file mode 100644 (file)
index 0000000..47e5e76
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that overflowing an integer in a loop and then only using it in an integer context produces a result that complies with double arithmetic.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(0) is -4094336
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-int-overflow-in-loop.js b/test/webkit/dfg-int-overflow-in-loop.js
new file mode 100644 (file)
index 0000000..8752a12
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that overflowing an integer in a loop and then only using it in an integer context produces a result that complies with double arithmetic."
+);
+
+function foo(a) {
+    var x = a;
+    // Make sure that this is the loop where we do OSR entry.
+    for (var i = 0; i < 100000; ++i)
+        x += 1;
+    // Now trigger overflow that is so severe that the floating point result would be different than the bigint result.
+    for (var i = 0; i < 160097152; ++i)
+        x += 2147483647;
+    return x | 0;
+}
+
+shouldBe("foo(0)", "-4094336");
+
diff --git a/test/webkit/dfg-int-overflow-large-constants-in-a-line-expected.txt b/test/webkit/dfg-int-overflow-large-constants-in-a-line-expected.txt
new file mode 100644 (file)
index 0000000..813f101
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that our optimization to elide overflow checks understands that if we keep adding huge numbers, we could end up creating a number that is not precisely representable using doubles.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS foo(2147483647) is 2147483552
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-int-overflow-large-constants-in-a-line.js b/test/webkit/dfg-int-overflow-large-constants-in-a-line.js
new file mode 100644 (file)
index 0000000..4e2f970
--- /dev/null
@@ -0,0 +1,76 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that our optimization to elide overflow checks understands that if we keep adding huge numbers, we could end up creating a number that is not precisely representable using doubles."
+);
+
+function foo(a) {
+    var x = a;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    x += 281474976710655;
+    x += 281474976710654;
+    x += 281474976710653;
+    x += 281474976710652;
+    return x | 0
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(2147483647)", "2147483552");
+
+
diff --git a/test/webkit/dfg-int32-to-double-on-known-number-expected.txt b/test/webkit/dfg-int32-to-double-on-known-number-expected.txt
new file mode 100644 (file)
index 0000000..3cfe35c
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we don't emit unnecessary speculation checks when performing an int32 to double conversion on a value that is proved to be a number, predicted to be an int32, but not proved to be an int32.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS foo({f:5}, 42.5) is 52.5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-int32-to-double-on-known-number.js b/test/webkit/dfg-int32-to-double-on-known-number.js
new file mode 100644 (file)
index 0000000..a3aecad
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we don't emit unnecessary speculation checks when performing an int32 to double conversion on a value that is proved to be a number, predicted to be an int32, but not proved to be an int32."
+);
+
+function foo(a, b) {
+    var x = a.f;
+    var y;
+    function bar() {
+        return y;
+    }
+    var z = x + b;
+    y = x;
+    if (z > 1)
+        return y + b + bar();
+    else
+        return 72;
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo({f:5}, 42.5)", "52.5");
diff --git a/test/webkit/dfg-int32-to-double-on-set-local-and-exit-expected.txt b/test/webkit/dfg-int32-to-double-on-set-local-and-exit-expected.txt
new file mode 100644 (file)
index 0000000..6e386a5
--- /dev/null
@@ -0,0 +1,1233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that an Int32ToDouble placed on a SetLocal does a forward exit.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+PASS counter is 1200
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-int32-to-double-on-set-local-and-exit.js b/test/webkit/dfg-int32-to-double-on-set-local-and-exit.js
new file mode 100644 (file)
index 0000000..8686391
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that an Int32ToDouble placed on a SetLocal does a forward exit."
+);
+
+var counter = 0;
+
+function checkpoint(text) {
+    debug("Checkpoint: " + text);
+    counter++;
+}
+
+function func1() {
+    checkpoint("a");
+    a = Date.now() + Date.now() + Date.now() + Date.now() + Date.now() + Date.now();
+    checkpoint("b");
+}
+function func2() {
+    checkpoint("c");
+    return Date.now() + Date.now() + Date.now() + Date.now() + Date.now() + Date.now();
+}
+
+function func3(s) {
+    checkpoint("1");
+    s = func1(); // The bug is that this function will be called twice, if our Int32ToDouble hoisting does a backward speculation.
+    checkpoint("2");
+    s = func2();
+    checkpoint("3");
+    return s;
+}
+
+function test() {
+    return func3(1);
+}
+
+
+for (var i=0; i < 200; i++) {
+    test();
+}
+
+shouldBe("counter", "1200");
diff --git a/test/webkit/dfg-int32-to-double-on-set-local-and-sometimes-exit-expected.txt b/test/webkit/dfg-int32-to-double-on-set-local-and-sometimes-exit-expected.txt
new file mode 100644 (file)
index 0000000..5799e95
--- /dev/null
@@ -0,0 +1,1233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that an Int32ToDouble placed on a SetLocal does a forward exit, and works right even when the relevant variable is actually predicted numeric.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+Checkpoint: 1
+Checkpoint: a
+Checkpoint: b
+Checkpoint: 2
+Checkpoint: c
+Checkpoint: 3
+PASS counter is 1200
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-int32-to-double-on-set-local-and-sometimes-exit.js b/test/webkit/dfg-int32-to-double-on-set-local-and-sometimes-exit.js
new file mode 100644 (file)
index 0000000..532198e
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that an Int32ToDouble placed on a SetLocal does a forward exit, and works right even when the relevant variable is actually predicted numeric."
+);
+
+var counter = 0;
+
+function checkpoint(text) {
+    debug("Checkpoint: " + text);
+    counter++;
+}
+
+function func1() {
+    checkpoint("a");
+    a = Date.now() + Date.now() + Date.now() + Date.now() + Date.now() + Date.now();
+    checkpoint("b");
+    if (counter < 1100)
+        return 0;
+}
+function func2() {
+    checkpoint("c");
+    return Date.now() + Date.now() + Date.now() + Date.now() + Date.now() + Date.now();
+}
+
+function func3(s) {
+    checkpoint("1");
+    s = func1(); // The bug is that this function will be called twice, if our Int32ToDouble hoisting does a backward speculation.
+    checkpoint("2");
+    s = func2();
+    checkpoint("3");
+    return s;
+}
+
+function test() {
+    return func3(1);
+}
+
+
+for (var i=0; i < 200; i++) {
+    test();
+}
+
+shouldBe("counter", "1200");
diff --git a/test/webkit/dfg-integer-optimization-expected.txt b/test/webkit/dfg-integer-optimization-expected.txt
new file mode 100644 (file)
index 0000000..bad97ae
--- /dev/null
@@ -0,0 +1,2032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that integer addition optimizations in the DFG are not performed too overzealously.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result.a is 1
+PASS result.b is 1
+PASS result.a is 20000001
+PASS result.b is 20000001
+PASS result.a is 40000001
+PASS result.b is 40000001
+PASS result.a is 60000001
+PASS result.b is 60000001
+PASS result.a is 80000001
+PASS result.b is 80000001
+PASS result.a is 100000001
+PASS result.b is 100000001
+PASS result.a is 120000001
+PASS result.b is 120000001
+PASS result.a is 140000001
+PASS result.b is 140000001
+PASS result.a is 160000001
+PASS result.b is 160000001
+PASS result.a is 180000001
+PASS result.b is 180000001
+PASS result.a is 200000001
+PASS result.b is 200000001
+PASS result.a is 220000001
+PASS result.b is 220000001
+PASS result.a is 240000001
+PASS result.b is 240000001
+PASS result.a is 260000001
+PASS result.b is 260000001
+PASS result.a is 280000001
+PASS result.b is 280000001
+PASS result.a is 300000001
+PASS result.b is 300000001
+PASS result.a is 320000001
+PASS result.b is 320000001
+PASS result.a is 340000001
+PASS result.b is 340000001
+PASS result.a is 360000001
+PASS result.b is 360000001
+PASS result.a is 380000001
+PASS result.b is 380000001
+PASS result.a is 400000001
+PASS result.b is 400000001
+PASS result.a is 420000001
+PASS result.b is 420000001
+PASS result.a is 440000001
+PASS result.b is 440000001
+PASS result.a is 460000001
+PASS result.b is 460000001
+PASS result.a is 480000001
+PASS result.b is 480000001
+PASS result.a is 500000001
+PASS result.b is 500000001
+PASS result.a is 520000001
+PASS result.b is 520000001
+PASS result.a is 540000001
+PASS result.b is 540000001
+PASS result.a is 560000001
+PASS result.b is 560000001
+PASS result.a is 580000001
+PASS result.b is 580000001
+PASS result.a is 600000001
+PASS result.b is 600000001
+PASS result.a is 620000001
+PASS result.b is 620000001
+PASS result.a is 640000001
+PASS result.b is 640000001
+PASS result.a is 660000001
+PASS result.b is 660000001
+PASS result.a is 680000001
+PASS result.b is 680000001
+PASS result.a is 700000001
+PASS result.b is 700000001
+PASS result.a is 720000001
+PASS result.b is 720000001
+PASS result.a is 740000001
+PASS result.b is 740000001
+PASS result.a is 760000001
+PASS result.b is 760000001
+PASS result.a is 780000001
+PASS result.b is 780000001
+PASS result.a is 800000001
+PASS result.b is 800000001
+PASS result.a is 820000001
+PASS result.b is 820000001
+PASS result.a is 840000001
+PASS result.b is 840000001
+PASS result.a is 860000001
+PASS result.b is 860000001
+PASS result.a is 880000001
+PASS result.b is 880000001
+PASS result.a is 900000001
+PASS result.b is 900000001
+PASS result.a is 920000001
+PASS result.b is 920000001
+PASS result.a is 940000001
+PASS result.b is 940000001
+PASS result.a is 960000001
+PASS result.b is 960000001
+PASS result.a is 980000001
+PASS result.b is 980000001
+PASS result.a is 1000000001
+PASS result.b is 1000000001
+PASS result.a is 1020000001
+PASS result.b is 1020000001
+PASS result.a is 1040000001
+PASS result.b is 1040000001
+PASS result.a is 1060000001
+PASS result.b is 1060000001
+PASS result.a is 1080000001
+PASS result.b is 1080000001
+PASS result.a is 1100000001
+PASS result.b is 1100000001
+PASS result.a is 1120000001
+PASS result.b is 1120000001
+PASS result.a is 1140000001
+PASS result.b is 1140000001
+PASS result.a is 1160000001
+PASS result.b is 1160000001
+PASS result.a is 1180000001
+PASS result.b is 1180000001
+PASS result.a is 1200000001
+PASS result.b is 1200000001
+PASS result.a is 1220000001
+PASS result.b is 1220000001
+PASS result.a is 1240000001
+PASS result.b is 1240000001
+PASS result.a is 1260000001
+PASS result.b is 1260000001
+PASS result.a is 1280000001
+PASS result.b is 1280000001
+PASS result.a is 1300000001
+PASS result.b is 1300000001
+PASS result.a is 1320000001
+PASS result.b is 1320000001
+PASS result.a is 1340000001
+PASS result.b is 1340000001
+PASS result.a is 1360000001
+PASS result.b is 1360000001
+PASS result.a is 1380000001
+PASS result.b is 1380000001
+PASS result.a is 1400000001
+PASS result.b is 1400000001
+PASS result.a is 1420000001
+PASS result.b is 1420000001
+PASS result.a is 1440000001
+PASS result.b is 1440000001
+PASS result.a is 1460000001
+PASS result.b is 1460000001
+PASS result.a is 1480000001
+PASS result.b is 1480000001
+PASS result.a is 1500000001
+PASS result.b is 1500000001
+PASS result.a is 1520000001
+PASS result.b is 1520000001
+PASS result.a is 1540000001
+PASS result.b is 1540000001
+PASS result.a is 1560000001
+PASS result.b is 1560000001
+PASS result.a is 1580000001
+PASS result.b is 1580000001
+PASS result.a is 1600000001
+PASS result.b is 1600000001
+PASS result.a is 1620000001
+PASS result.b is 1620000001
+PASS result.a is 1640000001
+PASS result.b is 1640000001
+PASS result.a is 1660000001
+PASS result.b is 1660000001
+PASS result.a is 1680000001
+PASS result.b is 1680000001
+PASS result.a is 1700000001
+PASS result.b is 1700000001
+PASS result.a is 1720000001
+PASS result.b is 1720000001
+PASS result.a is 1740000001
+PASS result.b is 1740000001
+PASS result.a is 1760000001
+PASS result.b is 1760000001
+PASS result.a is 1780000001
+PASS result.b is 1780000001
+PASS result.a is 1800000001
+PASS result.b is 1800000001
+PASS result.a is 1820000001
+PASS result.b is 1820000001
+PASS result.a is 1840000001
+PASS result.b is 1840000001
+PASS result.a is 1860000001
+PASS result.b is 1860000001
+PASS result.a is 1880000001
+PASS result.b is 1880000001
+PASS result.a is 1900000001
+PASS result.b is 1900000001
+PASS result.a is 1920000001
+PASS result.b is 1920000001
+PASS result.a is 1940000001
+PASS result.b is 1940000001
+PASS result.a is 1960000001
+PASS result.b is 1960000001
+PASS result.a is 1980000001
+PASS result.b is 1980000001
+PASS result.a is 2000000001
+PASS result.b is 2000000001
+PASS result.a is 2020000001
+PASS result.b is 2020000001
+PASS result.a is 2040000001
+PASS result.b is 2040000001
+PASS result.a is 2060000001
+PASS result.b is 2060000001
+PASS result.a is 2080000001
+PASS result.b is 2080000001
+PASS result.a is 2100000001
+PASS result.b is 2100000001
+PASS result.a is 2120000001
+PASS result.b is 2120000001
+PASS result.a is 2140000001
+PASS result.b is 2140000001
+PASS result.a is -2134967295
+PASS result.b is 2160000001
+PASS result.a is -2114967295
+PASS result.b is 2180000001
+PASS result.a is -2094967295
+PASS result.b is 2200000001
+PASS result.a is -2074967295
+PASS result.b is 2220000001
+PASS result.a is -2054967295
+PASS result.b is 2240000001
+PASS result.a is -2034967295
+PASS result.b is 2260000001
+PASS result.a is -2014967295
+PASS result.b is 2280000001
+PASS result.a is -1994967295
+PASS result.b is 2300000001
+PASS result.a is -1974967295
+PASS result.b is 2320000001
+PASS result.a is -1954967295
+PASS result.b is 2340000001
+PASS result.a is -1934967295
+PASS result.b is 2360000001
+PASS result.a is -1914967295
+PASS result.b is 2380000001
+PASS result.a is -1894967295
+PASS result.b is 2400000001
+PASS result.a is -1874967295
+PASS result.b is 2420000001
+PASS result.a is -1854967295
+PASS result.b is 2440000001
+PASS result.a is -1834967295
+PASS result.b is 2460000001
+PASS result.a is -1814967295
+PASS result.b is 2480000001
+PASS result.a is -1794967295
+PASS result.b is 2500000001
+PASS result.a is -1774967295
+PASS result.b is 2520000001
+PASS result.a is -1754967295
+PASS result.b is 2540000001
+PASS result.a is -1734967295
+PASS result.b is 2560000001
+PASS result.a is -1714967295
+PASS result.b is 2580000001
+PASS result.a is -1694967295
+PASS result.b is 2600000001
+PASS result.a is -1674967295
+PASS result.b is 2620000001
+PASS result.a is -1654967295
+PASS result.b is 2640000001
+PASS result.a is -1634967295
+PASS result.b is 2660000001
+PASS result.a is -1614967295
+PASS result.b is 2680000001
+PASS result.a is -1594967295
+PASS result.b is 2700000001
+PASS result.a is -1574967295
+PASS result.b is 2720000001
+PASS result.a is -1554967295
+PASS result.b is 2740000001
+PASS result.a is -1534967295
+PASS result.b is 2760000001
+PASS result.a is -1514967295
+PASS result.b is 2780000001
+PASS result.a is -1494967295
+PASS result.b is 2800000001
+PASS result.a is -1474967295
+PASS result.b is 2820000001
+PASS result.a is -1454967295
+PASS result.b is 2840000001
+PASS result.a is -1434967295
+PASS result.b is 2860000001
+PASS result.a is -1414967295
+PASS result.b is 2880000001
+PASS result.a is -1394967295
+PASS result.b is 2900000001
+PASS result.a is -1374967295
+PASS result.b is 2920000001
+PASS result.a is -1354967295
+PASS result.b is 2940000001
+PASS result.a is -1334967295
+PASS result.b is 2960000001
+PASS result.a is -1314967295
+PASS result.b is 2980000001
+PASS result.a is -1294967295
+PASS result.b is 3000000001
+PASS result.a is -1274967295
+PASS result.b is 3020000001
+PASS result.a is -1254967295
+PASS result.b is 3040000001
+PASS result.a is -1234967295
+PASS result.b is 3060000001
+PASS result.a is -1214967295
+PASS result.b is 3080000001
+PASS result.a is -1194967295
+PASS result.b is 3100000001
+PASS result.a is -1174967295
+PASS result.b is 3120000001
+PASS result.a is -1154967295
+PASS result.b is 3140000001
+PASS result.a is -1134967295
+PASS result.b is 3160000001
+PASS result.a is -1114967295
+PASS result.b is 3180000001
+PASS result.a is -1094967295
+PASS result.b is 3200000001
+PASS result.a is -1074967295
+PASS result.b is 3220000001
+PASS result.a is -1054967295
+PASS result.b is 3240000001
+PASS result.a is -1034967295
+PASS result.b is 3260000001
+PASS result.a is -1014967295
+PASS result.b is 3280000001
+PASS result.a is -994967295
+PASS result.b is 3300000001
+PASS result.a is -974967295
+PASS result.b is 3320000001
+PASS result.a is -954967295
+PASS result.b is 3340000001
+PASS result.a is -934967295
+PASS result.b is 3360000001
+PASS result.a is -914967295
+PASS result.b is 3380000001
+PASS result.a is -894967295
+PASS result.b is 3400000001
+PASS result.a is -874967295
+PASS result.b is 3420000001
+PASS result.a is -854967295
+PASS result.b is 3440000001
+PASS result.a is -834967295
+PASS result.b is 3460000001
+PASS result.a is -814967295
+PASS result.b is 3480000001
+PASS result.a is -794967295
+PASS result.b is 3500000001
+PASS result.a is -774967295
+PASS result.b is 3520000001
+PASS result.a is -754967295
+PASS result.b is 3540000001
+PASS result.a is -734967295
+PASS result.b is 3560000001
+PASS result.a is -714967295
+PASS result.b is 3580000001
+PASS result.a is -694967295
+PASS result.b is 3600000001
+PASS result.a is -674967295
+PASS result.b is 3620000001
+PASS result.a is -654967295
+PASS result.b is 3640000001
+PASS result.a is -634967295
+PASS result.b is 3660000001
+PASS result.a is -614967295
+PASS result.b is 3680000001
+PASS result.a is -594967295
+PASS result.b is 3700000001
+PASS result.a is -574967295
+PASS result.b is 3720000001
+PASS result.a is -554967295
+PASS result.b is 3740000001
+PASS result.a is -534967295
+PASS result.b is 3760000001
+PASS result.a is -514967295
+PASS result.b is 3780000001
+PASS result.a is -494967295
+PASS result.b is 3800000001
+PASS result.a is -474967295
+PASS result.b is 3820000001
+PASS result.a is -454967295
+PASS result.b is 3840000001
+PASS result.a is -434967295
+PASS result.b is 3860000001
+PASS result.a is -414967295
+PASS result.b is 3880000001
+PASS result.a is -394967295
+PASS result.b is 3900000001
+PASS result.a is -374967295
+PASS result.b is 3920000001
+PASS result.a is -354967295
+PASS result.b is 3940000001
+PASS result.a is -334967295
+PASS result.b is 3960000001
+PASS result.a is -314967295
+PASS result.b is 3980000001
+PASS result.a is -294967295
+PASS result.b is 4000000001
+PASS result.a is -274967295
+PASS result.b is 4020000001
+PASS result.a is -254967295
+PASS result.b is 4040000001
+PASS result.a is -234967295
+PASS result.b is 4060000001
+PASS result.a is -214967295
+PASS result.b is 4080000001
+PASS result.a is -194967295
+PASS result.b is 4100000001
+PASS result.a is -174967295
+PASS result.b is 4120000001
+PASS result.a is -154967295
+PASS result.b is 4140000001
+PASS result.a is -134967295
+PASS result.b is 4160000001
+PASS result.a is -114967295
+PASS result.b is 4180000001
+PASS result.a is -94967295
+PASS result.b is 4200000001
+PASS result.a is -74967295
+PASS result.b is 4220000001
+PASS result.a is -54967295
+PASS result.b is 4240000001
+PASS result.a is -34967295
+PASS result.b is 4260000001
+PASS result.a is -14967295
+PASS result.b is 4280000001
+PASS result.a is 5032705
+PASS result.b is 4300000001
+PASS result.a is 25032705
+PASS result.b is 4320000001
+PASS result.a is 45032705
+PASS result.b is 4340000001
+PASS result.a is 65032705
+PASS result.b is 4360000001
+PASS result.a is 85032705
+PASS result.b is 4380000001
+PASS result.a is 105032705
+PASS result.b is 4400000001
+PASS result.a is 125032705
+PASS result.b is 4420000001
+PASS result.a is 145032705
+PASS result.b is 4440000001
+PASS result.a is 165032705
+PASS result.b is 4460000001
+PASS result.a is 185032705
+PASS result.b is 4480000001
+PASS result.a is 205032705
+PASS result.b is 4500000001
+PASS result.a is 225032705
+PASS result.b is 4520000001
+PASS result.a is 245032705
+PASS result.b is 4540000001
+PASS result.a is 265032705
+PASS result.b is 4560000001
+PASS result.a is 285032705
+PASS result.b is 4580000001
+PASS result.a is 305032705
+PASS result.b is 4600000001
+PASS result.a is 325032705
+PASS result.b is 4620000001
+PASS result.a is 345032705
+PASS result.b is 4640000001
+PASS result.a is 365032705
+PASS result.b is 4660000001
+PASS result.a is 385032705
+PASS result.b is 4680000001
+PASS result.a is 405032705
+PASS result.b is 4700000001
+PASS result.a is 425032705
+PASS result.b is 4720000001
+PASS result.a is 445032705
+PASS result.b is 4740000001
+PASS result.a is 465032705
+PASS result.b is 4760000001
+PASS result.a is 485032705
+PASS result.b is 4780000001
+PASS result.a is 505032705
+PASS result.b is 4800000001
+PASS result.a is 525032705
+PASS result.b is 4820000001
+PASS result.a is 545032705
+PASS result.b is 4840000001
+PASS result.a is 565032705
+PASS result.b is 4860000001
+PASS result.a is 585032705
+PASS result.b is 4880000001
+PASS result.a is 605032705
+PASS result.b is 4900000001
+PASS result.a is 625032705
+PASS result.b is 4920000001
+PASS result.a is 645032705
+PASS result.b is 4940000001
+PASS result.a is 665032705
+PASS result.b is 4960000001
+PASS result.a is 685032705
+PASS result.b is 4980000001
+PASS result.a is 705032705
+PASS result.b is 5000000001
+PASS result.a is 725032705
+PASS result.b is 5020000001
+PASS result.a is 745032705
+PASS result.b is 5040000001
+PASS result.a is 765032705
+PASS result.b is 5060000001
+PASS result.a is 785032705
+PASS result.b is 5080000001
+PASS result.a is 805032705
+PASS result.b is 5100000001
+PASS result.a is 825032705
+PASS result.b is 5120000001
+PASS result.a is 845032705
+PASS result.b is 5140000001
+PASS result.a is 865032705
+PASS result.b is 5160000001
+PASS result.a is 885032705
+PASS result.b is 5180000001
+PASS result.a is 905032705
+PASS result.b is 5200000001
+PASS result.a is 925032705
+PASS result.b is 5220000001
+PASS result.a is 945032705
+PASS result.b is 5240000001
+PASS result.a is 965032705
+PASS result.b is 5260000001
+PASS result.a is 985032705
+PASS result.b is 5280000001
+PASS result.a is 1005032705
+PASS result.b is 5300000001
+PASS result.a is 1025032705
+PASS result.b is 5320000001
+PASS result.a is 1045032705
+PASS result.b is 5340000001
+PASS result.a is 1065032705
+PASS result.b is 5360000001
+PASS result.a is 1085032705
+PASS result.b is 5380000001
+PASS result.a is 1105032705
+PASS result.b is 5400000001
+PASS result.a is 1125032705
+PASS result.b is 5420000001
+PASS result.a is 1145032705
+PASS result.b is 5440000001
+PASS result.a is 1165032705
+PASS result.b is 5460000001
+PASS result.a is 1185032705
+PASS result.b is 5480000001
+PASS result.a is 1205032705
+PASS result.b is 5500000001
+PASS result.a is 1225032705
+PASS result.b is 5520000001
+PASS result.a is 1245032705
+PASS result.b is 5540000001
+PASS result.a is 1265032705
+PASS result.b is 5560000001
+PASS result.a is 1285032705
+PASS result.b is 5580000001
+PASS result.a is 1305032705
+PASS result.b is 5600000001
+PASS result.a is 1325032705
+PASS result.b is 5620000001
+PASS result.a is 1345032705
+PASS result.b is 5640000001
+PASS result.a is 1365032705
+PASS result.b is 5660000001
+PASS result.a is 1385032705
+PASS result.b is 5680000001
+PASS result.a is 1405032705
+PASS result.b is 5700000001
+PASS result.a is 1425032705
+PASS result.b is 5720000001
+PASS result.a is 1445032705
+PASS result.b is 5740000001
+PASS result.a is 1465032705
+PASS result.b is 5760000001
+PASS result.a is 1485032705
+PASS result.b is 5780000001
+PASS result.a is 1505032705
+PASS result.b is 5800000001
+PASS result.a is 1525032705
+PASS result.b is 5820000001
+PASS result.a is 1545032705
+PASS result.b is 5840000001
+PASS result.a is 1565032705
+PASS result.b is 5860000001
+PASS result.a is 1585032705
+PASS result.b is 5880000001
+PASS result.a is 1605032705
+PASS result.b is 5900000001
+PASS result.a is 1625032705
+PASS result.b is 5920000001
+PASS result.a is 1645032705
+PASS result.b is 5940000001
+PASS result.a is 1665032705
+PASS result.b is 5960000001
+PASS result.a is 1685032705
+PASS result.b is 5980000001
+PASS result.a is 1705032705
+PASS result.b is 6000000001
+PASS result.a is 1725032705
+PASS result.b is 6020000001
+PASS result.a is 1745032705
+PASS result.b is 6040000001
+PASS result.a is 1765032705
+PASS result.b is 6060000001
+PASS result.a is 1785032705
+PASS result.b is 6080000001
+PASS result.a is 1805032705
+PASS result.b is 6100000001
+PASS result.a is 1825032705
+PASS result.b is 6120000001
+PASS result.a is 1845032705
+PASS result.b is 6140000001
+PASS result.a is 1865032705
+PASS result.b is 6160000001
+PASS result.a is 1885032705
+PASS result.b is 6180000001
+PASS result.a is 1905032705
+PASS result.b is 6200000001
+PASS result.a is 1925032705
+PASS result.b is 6220000001
+PASS result.a is 1945032705
+PASS result.b is 6240000001
+PASS result.a is 1965032705
+PASS result.b is 6260000001
+PASS result.a is 1985032705
+PASS result.b is 6280000001
+PASS result.a is 2005032705
+PASS result.b is 6300000001
+PASS result.a is 2025032705
+PASS result.b is 6320000001
+PASS result.a is 2045032705
+PASS result.b is 6340000001
+PASS result.a is 2065032705
+PASS result.b is 6360000001
+PASS result.a is 2085032705
+PASS result.b is 6380000001
+PASS result.a is 2105032705
+PASS result.b is 6400000001
+PASS result.a is 2125032705
+PASS result.b is 6420000001
+PASS result.a is 2145032705
+PASS result.b is 6440000001
+PASS result.a is -2129934591
+PASS result.b is 6460000001
+PASS result.a is -2109934591
+PASS result.b is 6480000001
+PASS result.a is -2089934591
+PASS result.b is 6500000001
+PASS result.a is -2069934591
+PASS result.b is 6520000001
+PASS result.a is -2049934591
+PASS result.b is 6540000001
+PASS result.a is -2029934591
+PASS result.b is 6560000001
+PASS result.a is -2009934591
+PASS result.b is 6580000001
+PASS result.a is -1989934591
+PASS result.b is 6600000001
+PASS result.a is -1969934591
+PASS result.b is 6620000001
+PASS result.a is -1949934591
+PASS result.b is 6640000001
+PASS result.a is -1929934591
+PASS result.b is 6660000001
+PASS result.a is -1909934591
+PASS result.b is 6680000001
+PASS result.a is -1889934591
+PASS result.b is 6700000001
+PASS result.a is -1869934591
+PASS result.b is 6720000001
+PASS result.a is -1849934591
+PASS result.b is 6740000001
+PASS result.a is -1829934591
+PASS result.b is 6760000001
+PASS result.a is -1809934591
+PASS result.b is 6780000001
+PASS result.a is -1789934591
+PASS result.b is 6800000001
+PASS result.a is -1769934591
+PASS result.b is 6820000001
+PASS result.a is -1749934591
+PASS result.b is 6840000001
+PASS result.a is -1729934591
+PASS result.b is 6860000001
+PASS result.a is -1709934591
+PASS result.b is 6880000001
+PASS result.a is -1689934591
+PASS result.b is 6900000001
+PASS result.a is -1669934591
+PASS result.b is 6920000001
+PASS result.a is -1649934591
+PASS result.b is 6940000001
+PASS result.a is -1629934591
+PASS result.b is 6960000001
+PASS result.a is -1609934591
+PASS result.b is 6980000001
+PASS result.a is -1589934591
+PASS result.b is 7000000001
+PASS result.a is -1569934591
+PASS result.b is 7020000001
+PASS result.a is -1549934591
+PASS result.b is 7040000001
+PASS result.a is -1529934591
+PASS result.b is 7060000001
+PASS result.a is -1509934591
+PASS result.b is 7080000001
+PASS result.a is -1489934591
+PASS result.b is 7100000001
+PASS result.a is -1469934591
+PASS result.b is 7120000001
+PASS result.a is -1449934591
+PASS result.b is 7140000001
+PASS result.a is -1429934591
+PASS result.b is 7160000001
+PASS result.a is -1409934591
+PASS result.b is 7180000001
+PASS result.a is -1389934591
+PASS result.b is 7200000001
+PASS result.a is -1369934591
+PASS result.b is 7220000001
+PASS result.a is -1349934591
+PASS result.b is 7240000001
+PASS result.a is -1329934591
+PASS result.b is 7260000001
+PASS result.a is -1309934591
+PASS result.b is 7280000001
+PASS result.a is -1289934591
+PASS result.b is 7300000001
+PASS result.a is -1269934591
+PASS result.b is 7320000001
+PASS result.a is -1249934591
+PASS result.b is 7340000001
+PASS result.a is -1229934591
+PASS result.b is 7360000001
+PASS result.a is -1209934591
+PASS result.b is 7380000001
+PASS result.a is -1189934591
+PASS result.b is 7400000001
+PASS result.a is -1169934591
+PASS result.b is 7420000001
+PASS result.a is -1149934591
+PASS result.b is 7440000001
+PASS result.a is -1129934591
+PASS result.b is 7460000001
+PASS result.a is -1109934591
+PASS result.b is 7480000001
+PASS result.a is -1089934591
+PASS result.b is 7500000001
+PASS result.a is -1069934591
+PASS result.b is 7520000001
+PASS result.a is -1049934591
+PASS result.b is 7540000001
+PASS result.a is -1029934591
+PASS result.b is 7560000001
+PASS result.a is -1009934591
+PASS result.b is 7580000001
+PASS result.a is -989934591
+PASS result.b is 7600000001
+PASS result.a is -969934591
+PASS result.b is 7620000001
+PASS result.a is -949934591
+PASS result.b is 7640000001
+PASS result.a is -929934591
+PASS result.b is 7660000001
+PASS result.a is -909934591
+PASS result.b is 7680000001
+PASS result.a is -889934591
+PASS result.b is 7700000001
+PASS result.a is -869934591
+PASS result.b is 7720000001
+PASS result.a is -849934591
+PASS result.b is 7740000001
+PASS result.a is -829934591
+PASS result.b is 7760000001
+PASS result.a is -809934591
+PASS result.b is 7780000001
+PASS result.a is -789934591
+PASS result.b is 7800000001
+PASS result.a is -769934591
+PASS result.b is 7820000001
+PASS result.a is -749934591
+PASS result.b is 7840000001
+PASS result.a is -729934591
+PASS result.b is 7860000001
+PASS result.a is -709934591
+PASS result.b is 7880000001
+PASS result.a is -689934591
+PASS result.b is 7900000001
+PASS result.a is -669934591
+PASS result.b is 7920000001
+PASS result.a is -649934591
+PASS result.b is 7940000001
+PASS result.a is -629934591
+PASS result.b is 7960000001
+PASS result.a is -609934591
+PASS result.b is 7980000001
+PASS result.a is -589934591
+PASS result.b is 8000000001
+PASS result.a is -569934591
+PASS result.b is 8020000001
+PASS result.a is -549934591
+PASS result.b is 8040000001
+PASS result.a is -529934591
+PASS result.b is 8060000001
+PASS result.a is -509934591
+PASS result.b is 8080000001
+PASS result.a is -489934591
+PASS result.b is 8100000001
+PASS result.a is -469934591
+PASS result.b is 8120000001
+PASS result.a is -449934591
+PASS result.b is 8140000001
+PASS result.a is -429934591
+PASS result.b is 8160000001
+PASS result.a is -409934591
+PASS result.b is 8180000001
+PASS result.a is -389934591
+PASS result.b is 8200000001
+PASS result.a is -369934591
+PASS result.b is 8220000001
+PASS result.a is -349934591
+PASS result.b is 8240000001
+PASS result.a is -329934591
+PASS result.b is 8260000001
+PASS result.a is -309934591
+PASS result.b is 8280000001
+PASS result.a is -289934591
+PASS result.b is 8300000001
+PASS result.a is -269934591
+PASS result.b is 8320000001
+PASS result.a is -249934591
+PASS result.b is 8340000001
+PASS result.a is -229934591
+PASS result.b is 8360000001
+PASS result.a is -209934591
+PASS result.b is 8380000001
+PASS result.a is -189934591
+PASS result.b is 8400000001
+PASS result.a is -169934591
+PASS result.b is 8420000001
+PASS result.a is -149934591
+PASS result.b is 8440000001
+PASS result.a is -129934591
+PASS result.b is 8460000001
+PASS result.a is -109934591
+PASS result.b is 8480000001
+PASS result.a is -89934591
+PASS result.b is 8500000001
+PASS result.a is -69934591
+PASS result.b is 8520000001
+PASS result.a is -49934591
+PASS result.b is 8540000001
+PASS result.a is -29934591
+PASS result.b is 8560000001
+PASS result.a is -9934591
+PASS result.b is 8580000001
+PASS result.a is 10065409
+PASS result.b is 8600000001
+PASS result.a is 30065409
+PASS result.b is 8620000001
+PASS result.a is 50065409
+PASS result.b is 8640000001
+PASS result.a is 70065409
+PASS result.b is 8660000001
+PASS result.a is 90065409
+PASS result.b is 8680000001
+PASS result.a is 110065409
+PASS result.b is 8700000001
+PASS result.a is 130065409
+PASS result.b is 8720000001
+PASS result.a is 150065409
+PASS result.b is 8740000001
+PASS result.a is 170065409
+PASS result.b is 8760000001
+PASS result.a is 190065409
+PASS result.b is 8780000001
+PASS result.a is 210065409
+PASS result.b is 8800000001
+PASS result.a is 230065409
+PASS result.b is 8820000001
+PASS result.a is 250065409
+PASS result.b is 8840000001
+PASS result.a is 270065409
+PASS result.b is 8860000001
+PASS result.a is 290065409
+PASS result.b is 8880000001
+PASS result.a is 310065409
+PASS result.b is 8900000001
+PASS result.a is 330065409
+PASS result.b is 8920000001
+PASS result.a is 350065409
+PASS result.b is 8940000001
+PASS result.a is 370065409
+PASS result.b is 8960000001
+PASS result.a is 390065409
+PASS result.b is 8980000001
+PASS result.a is 410065409
+PASS result.b is 9000000001
+PASS result.a is 430065409
+PASS result.b is 9020000001
+PASS result.a is 450065409
+PASS result.b is 9040000001
+PASS result.a is 470065409
+PASS result.b is 9060000001
+PASS result.a is 490065409
+PASS result.b is 9080000001
+PASS result.a is 510065409
+PASS result.b is 9100000001
+PASS result.a is 530065409
+PASS result.b is 9120000001
+PASS result.a is 550065409
+PASS result.b is 9140000001
+PASS result.a is 570065409
+PASS result.b is 9160000001
+PASS result.a is 590065409
+PASS result.b is 9180000001
+PASS result.a is 610065409
+PASS result.b is 9200000001
+PASS result.a is 630065409
+PASS result.b is 9220000001
+PASS result.a is 650065409
+PASS result.b is 9240000001
+PASS result.a is 670065409
+PASS result.b is 9260000001
+PASS result.a is 690065409
+PASS result.b is 9280000001
+PASS result.a is 710065409
+PASS result.b is 9300000001
+PASS result.a is 730065409
+PASS result.b is 9320000001
+PASS result.a is 750065409
+PASS result.b is 9340000001
+PASS result.a is 770065409
+PASS result.b is 9360000001
+PASS result.a is 790065409
+PASS result.b is 9380000001
+PASS result.a is 810065409
+PASS result.b is 9400000001
+PASS result.a is 830065409
+PASS result.b is 9420000001
+PASS result.a is 850065409
+PASS result.b is 9440000001
+PASS result.a is 870065409
+PASS result.b is 9460000001
+PASS result.a is 890065409
+PASS result.b is 9480000001
+PASS result.a is 910065409
+PASS result.b is 9500000001
+PASS result.a is 930065409
+PASS result.b is 9520000001
+PASS result.a is 950065409
+PASS result.b is 9540000001
+PASS result.a is 970065409
+PASS result.b is 9560000001
+PASS result.a is 990065409
+PASS result.b is 9580000001
+PASS result.a is 1010065409
+PASS result.b is 9600000001
+PASS result.a is 1030065409
+PASS result.b is 9620000001
+PASS result.a is 1050065409
+PASS result.b is 9640000001
+PASS result.a is 1070065409
+PASS result.b is 9660000001
+PASS result.a is 1090065409
+PASS result.b is 9680000001
+PASS result.a is 1110065409
+PASS result.b is 9700000001
+PASS result.a is 1130065409
+PASS result.b is 9720000001
+PASS result.a is 1150065409
+PASS result.b is 9740000001
+PASS result.a is 1170065409
+PASS result.b is 9760000001
+PASS result.a is 1190065409
+PASS result.b is 9780000001
+PASS result.a is 1210065409
+PASS result.b is 9800000001
+PASS result.a is 1230065409
+PASS result.b is 9820000001
+PASS result.a is 1250065409
+PASS result.b is 9840000001
+PASS result.a is 1270065409
+PASS result.b is 9860000001
+PASS result.a is 1290065409
+PASS result.b is 9880000001
+PASS result.a is 1310065409
+PASS result.b is 9900000001
+PASS result.a is 1330065409
+PASS result.b is 9920000001
+PASS result.a is 1350065409
+PASS result.b is 9940000001
+PASS result.a is 1370065409
+PASS result.b is 9960000001
+PASS result.a is 1390065409
+PASS result.b is 9980000001
+PASS result.a is 1410065409
+PASS result.b is 10000000001
+PASS result.a is 1430065409
+PASS result.b is 10020000001
+PASS result.a is 1450065409
+PASS result.b is 10040000001
+PASS result.a is 1470065409
+PASS result.b is 10060000001
+PASS result.a is 1490065409
+PASS result.b is 10080000001
+PASS result.a is 1510065409
+PASS result.b is 10100000001
+PASS result.a is 1530065409
+PASS result.b is 10120000001
+PASS result.a is 1550065409
+PASS result.b is 10140000001
+PASS result.a is 1570065409
+PASS result.b is 10160000001
+PASS result.a is 1590065409
+PASS result.b is 10180000001
+PASS result.a is 1610065409
+PASS result.b is 10200000001
+PASS result.a is 1630065409
+PASS result.b is 10220000001
+PASS result.a is 1650065409
+PASS result.b is 10240000001
+PASS result.a is 1670065409
+PASS result.b is 10260000001
+PASS result.a is 1690065409
+PASS result.b is 10280000001
+PASS result.a is 1710065409
+PASS result.b is 10300000001
+PASS result.a is 1730065409
+PASS result.b is 10320000001
+PASS result.a is 1750065409
+PASS result.b is 10340000001
+PASS result.a is 1770065409
+PASS result.b is 10360000001
+PASS result.a is 1790065409
+PASS result.b is 10380000001
+PASS result.a is 1810065409
+PASS result.b is 10400000001
+PASS result.a is 1830065409
+PASS result.b is 10420000001
+PASS result.a is 1850065409
+PASS result.b is 10440000001
+PASS result.a is 1870065409
+PASS result.b is 10460000001
+PASS result.a is 1890065409
+PASS result.b is 10480000001
+PASS result.a is 1910065409
+PASS result.b is 10500000001
+PASS result.a is 1930065409
+PASS result.b is 10520000001
+PASS result.a is 1950065409
+PASS result.b is 10540000001
+PASS result.a is 1970065409
+PASS result.b is 10560000001
+PASS result.a is 1990065409
+PASS result.b is 10580000001
+PASS result.a is 2010065409
+PASS result.b is 10600000001
+PASS result.a is 2030065409
+PASS result.b is 10620000001
+PASS result.a is 2050065409
+PASS result.b is 10640000001
+PASS result.a is 2070065409
+PASS result.b is 10660000001
+PASS result.a is 2090065409
+PASS result.b is 10680000001
+PASS result.a is 2110065409
+PASS result.b is 10700000001
+PASS result.a is 2130065409
+PASS result.b is 10720000001
+PASS result.a is -2144901887
+PASS result.b is 10740000001
+PASS result.a is -2124901887
+PASS result.b is 10760000001
+PASS result.a is -2104901887
+PASS result.b is 10780000001
+PASS result.a is -2084901887
+PASS result.b is 10800000001
+PASS result.a is -2064901887
+PASS result.b is 10820000001
+PASS result.a is -2044901887
+PASS result.b is 10840000001
+PASS result.a is -2024901887
+PASS result.b is 10860000001
+PASS result.a is -2004901887
+PASS result.b is 10880000001
+PASS result.a is -1984901887
+PASS result.b is 10900000001
+PASS result.a is -1964901887
+PASS result.b is 10920000001
+PASS result.a is -1944901887
+PASS result.b is 10940000001
+PASS result.a is -1924901887
+PASS result.b is 10960000001
+PASS result.a is -1904901887
+PASS result.b is 10980000001
+PASS result.a is -1884901887
+PASS result.b is 11000000001
+PASS result.a is -1864901887
+PASS result.b is 11020000001
+PASS result.a is -1844901887
+PASS result.b is 11040000001
+PASS result.a is -1824901887
+PASS result.b is 11060000001
+PASS result.a is -1804901887
+PASS result.b is 11080000001
+PASS result.a is -1784901887
+PASS result.b is 11100000001
+PASS result.a is -1764901887
+PASS result.b is 11120000001
+PASS result.a is -1744901887
+PASS result.b is 11140000001
+PASS result.a is -1724901887
+PASS result.b is 11160000001
+PASS result.a is -1704901887
+PASS result.b is 11180000001
+PASS result.a is -1684901887
+PASS result.b is 11200000001
+PASS result.a is -1664901887
+PASS result.b is 11220000001
+PASS result.a is -1644901887
+PASS result.b is 11240000001
+PASS result.a is -1624901887
+PASS result.b is 11260000001
+PASS result.a is -1604901887
+PASS result.b is 11280000001
+PASS result.a is -1584901887
+PASS result.b is 11300000001
+PASS result.a is -1564901887
+PASS result.b is 11320000001
+PASS result.a is -1544901887
+PASS result.b is 11340000001
+PASS result.a is -1524901887
+PASS result.b is 11360000001
+PASS result.a is -1504901887
+PASS result.b is 11380000001
+PASS result.a is -1484901887
+PASS result.b is 11400000001
+PASS result.a is -1464901887
+PASS result.b is 11420000001
+PASS result.a is -1444901887
+PASS result.b is 11440000001
+PASS result.a is -1424901887
+PASS result.b is 11460000001
+PASS result.a is -1404901887
+PASS result.b is 11480000001
+PASS result.a is -1384901887
+PASS result.b is 11500000001
+PASS result.a is -1364901887
+PASS result.b is 11520000001
+PASS result.a is -1344901887
+PASS result.b is 11540000001
+PASS result.a is -1324901887
+PASS result.b is 11560000001
+PASS result.a is -1304901887
+PASS result.b is 11580000001
+PASS result.a is -1284901887
+PASS result.b is 11600000001
+PASS result.a is -1264901887
+PASS result.b is 11620000001
+PASS result.a is -1244901887
+PASS result.b is 11640000001
+PASS result.a is -1224901887
+PASS result.b is 11660000001
+PASS result.a is -1204901887
+PASS result.b is 11680000001
+PASS result.a is -1184901887
+PASS result.b is 11700000001
+PASS result.a is -1164901887
+PASS result.b is 11720000001
+PASS result.a is -1144901887
+PASS result.b is 11740000001
+PASS result.a is -1124901887
+PASS result.b is 11760000001
+PASS result.a is -1104901887
+PASS result.b is 11780000001
+PASS result.a is -1084901887
+PASS result.b is 11800000001
+PASS result.a is -1064901887
+PASS result.b is 11820000001
+PASS result.a is -1044901887
+PASS result.b is 11840000001
+PASS result.a is -1024901887
+PASS result.b is 11860000001
+PASS result.a is -1004901887
+PASS result.b is 11880000001
+PASS result.a is -984901887
+PASS result.b is 11900000001
+PASS result.a is -964901887
+PASS result.b is 11920000001
+PASS result.a is -944901887
+PASS result.b is 11940000001
+PASS result.a is -924901887
+PASS result.b is 11960000001
+PASS result.a is -904901887
+PASS result.b is 11980000001
+PASS result.a is -884901887
+PASS result.b is 12000000001
+PASS result.a is -864901887
+PASS result.b is 12020000001
+PASS result.a is -844901887
+PASS result.b is 12040000001
+PASS result.a is -824901887
+PASS result.b is 12060000001
+PASS result.a is -804901887
+PASS result.b is 12080000001
+PASS result.a is -784901887
+PASS result.b is 12100000001
+PASS result.a is -764901887
+PASS result.b is 12120000001
+PASS result.a is -744901887
+PASS result.b is 12140000001
+PASS result.a is -724901887
+PASS result.b is 12160000001
+PASS result.a is -704901887
+PASS result.b is 12180000001
+PASS result.a is -684901887
+PASS result.b is 12200000001
+PASS result.a is -664901887
+PASS result.b is 12220000001
+PASS result.a is -644901887
+PASS result.b is 12240000001
+PASS result.a is -624901887
+PASS result.b is 12260000001
+PASS result.a is -604901887
+PASS result.b is 12280000001
+PASS result.a is -584901887
+PASS result.b is 12300000001
+PASS result.a is -564901887
+PASS result.b is 12320000001
+PASS result.a is -544901887
+PASS result.b is 12340000001
+PASS result.a is -524901887
+PASS result.b is 12360000001
+PASS result.a is -504901887
+PASS result.b is 12380000001
+PASS result.a is -484901887
+PASS result.b is 12400000001
+PASS result.a is -464901887
+PASS result.b is 12420000001
+PASS result.a is -444901887
+PASS result.b is 12440000001
+PASS result.a is -424901887
+PASS result.b is 12460000001
+PASS result.a is -404901887
+PASS result.b is 12480000001
+PASS result.a is -384901887
+PASS result.b is 12500000001
+PASS result.a is -364901887
+PASS result.b is 12520000001
+PASS result.a is -344901887
+PASS result.b is 12540000001
+PASS result.a is -324901887
+PASS result.b is 12560000001
+PASS result.a is -304901887
+PASS result.b is 12580000001
+PASS result.a is -284901887
+PASS result.b is 12600000001
+PASS result.a is -264901887
+PASS result.b is 12620000001
+PASS result.a is -244901887
+PASS result.b is 12640000001
+PASS result.a is -224901887
+PASS result.b is 12660000001
+PASS result.a is -204901887
+PASS result.b is 12680000001
+PASS result.a is -184901887
+PASS result.b is 12700000001
+PASS result.a is -164901887
+PASS result.b is 12720000001
+PASS result.a is -144901887
+PASS result.b is 12740000001
+PASS result.a is -124901887
+PASS result.b is 12760000001
+PASS result.a is -104901887
+PASS result.b is 12780000001
+PASS result.a is -84901887
+PASS result.b is 12800000001
+PASS result.a is -64901887
+PASS result.b is 12820000001
+PASS result.a is -44901887
+PASS result.b is 12840000001
+PASS result.a is -24901887
+PASS result.b is 12860000001
+PASS result.a is -4901887
+PASS result.b is 12880000001
+PASS result.a is 15098113
+PASS result.b is 12900000001
+PASS result.a is 35098113
+PASS result.b is 12920000001
+PASS result.a is 55098113
+PASS result.b is 12940000001
+PASS result.a is 75098113
+PASS result.b is 12960000001
+PASS result.a is 95098113
+PASS result.b is 12980000001
+PASS result.a is 115098113
+PASS result.b is 13000000001
+PASS result.a is 135098113
+PASS result.b is 13020000001
+PASS result.a is 155098113
+PASS result.b is 13040000001
+PASS result.a is 175098113
+PASS result.b is 13060000001
+PASS result.a is 195098113
+PASS result.b is 13080000001
+PASS result.a is 215098113
+PASS result.b is 13100000001
+PASS result.a is 235098113
+PASS result.b is 13120000001
+PASS result.a is 255098113
+PASS result.b is 13140000001
+PASS result.a is 275098113
+PASS result.b is 13160000001
+PASS result.a is 295098113
+PASS result.b is 13180000001
+PASS result.a is 315098113
+PASS result.b is 13200000001
+PASS result.a is 335098113
+PASS result.b is 13220000001
+PASS result.a is 355098113
+PASS result.b is 13240000001
+PASS result.a is 375098113
+PASS result.b is 13260000001
+PASS result.a is 395098113
+PASS result.b is 13280000001
+PASS result.a is 415098113
+PASS result.b is 13300000001
+PASS result.a is 435098113
+PASS result.b is 13320000001
+PASS result.a is 455098113
+PASS result.b is 13340000001
+PASS result.a is 475098113
+PASS result.b is 13360000001
+PASS result.a is 495098113
+PASS result.b is 13380000001
+PASS result.a is 515098113
+PASS result.b is 13400000001
+PASS result.a is 535098113
+PASS result.b is 13420000001
+PASS result.a is 555098113
+PASS result.b is 13440000001
+PASS result.a is 575098113
+PASS result.b is 13460000001
+PASS result.a is 595098113
+PASS result.b is 13480000001
+PASS result.a is 615098113
+PASS result.b is 13500000001
+PASS result.a is 635098113
+PASS result.b is 13520000001
+PASS result.a is 655098113
+PASS result.b is 13540000001
+PASS result.a is 675098113
+PASS result.b is 13560000001
+PASS result.a is 695098113
+PASS result.b is 13580000001
+PASS result.a is 715098113
+PASS result.b is 13600000001
+PASS result.a is 735098113
+PASS result.b is 13620000001
+PASS result.a is 755098113
+PASS result.b is 13640000001
+PASS result.a is 775098113
+PASS result.b is 13660000001
+PASS result.a is 795098113
+PASS result.b is 13680000001
+PASS result.a is 815098113
+PASS result.b is 13700000001
+PASS result.a is 835098113
+PASS result.b is 13720000001
+PASS result.a is 855098113
+PASS result.b is 13740000001
+PASS result.a is 875098113
+PASS result.b is 13760000001
+PASS result.a is 895098113
+PASS result.b is 13780000001
+PASS result.a is 915098113
+PASS result.b is 13800000001
+PASS result.a is 935098113
+PASS result.b is 13820000001
+PASS result.a is 955098113
+PASS result.b is 13840000001
+PASS result.a is 975098113
+PASS result.b is 13860000001
+PASS result.a is 995098113
+PASS result.b is 13880000001
+PASS result.a is 1015098113
+PASS result.b is 13900000001
+PASS result.a is 1035098113
+PASS result.b is 13920000001
+PASS result.a is 1055098113
+PASS result.b is 13940000001
+PASS result.a is 1075098113
+PASS result.b is 13960000001
+PASS result.a is 1095098113
+PASS result.b is 13980000001
+PASS result.a is 1115098113
+PASS result.b is 14000000001
+PASS result.a is 1135098113
+PASS result.b is 14020000001
+PASS result.a is 1155098113
+PASS result.b is 14040000001
+PASS result.a is 1175098113
+PASS result.b is 14060000001
+PASS result.a is 1195098113
+PASS result.b is 14080000001
+PASS result.a is 1215098113
+PASS result.b is 14100000001
+PASS result.a is 1235098113
+PASS result.b is 14120000001
+PASS result.a is 1255098113
+PASS result.b is 14140000001
+PASS result.a is 1275098113
+PASS result.b is 14160000001
+PASS result.a is 1295098113
+PASS result.b is 14180000001
+PASS result.a is 1315098113
+PASS result.b is 14200000001
+PASS result.a is 1335098113
+PASS result.b is 14220000001
+PASS result.a is 1355098113
+PASS result.b is 14240000001
+PASS result.a is 1375098113
+PASS result.b is 14260000001
+PASS result.a is 1395098113
+PASS result.b is 14280000001
+PASS result.a is 1415098113
+PASS result.b is 14300000001
+PASS result.a is 1435098113
+PASS result.b is 14320000001
+PASS result.a is 1455098113
+PASS result.b is 14340000001
+PASS result.a is 1475098113
+PASS result.b is 14360000001
+PASS result.a is 1495098113
+PASS result.b is 14380000001
+PASS result.a is 1515098113
+PASS result.b is 14400000001
+PASS result.a is 1535098113
+PASS result.b is 14420000001
+PASS result.a is 1555098113
+PASS result.b is 14440000001
+PASS result.a is 1575098113
+PASS result.b is 14460000001
+PASS result.a is 1595098113
+PASS result.b is 14480000001
+PASS result.a is 1615098113
+PASS result.b is 14500000001
+PASS result.a is 1635098113
+PASS result.b is 14520000001
+PASS result.a is 1655098113
+PASS result.b is 14540000001
+PASS result.a is 1675098113
+PASS result.b is 14560000001
+PASS result.a is 1695098113
+PASS result.b is 14580000001
+PASS result.a is 1715098113
+PASS result.b is 14600000001
+PASS result.a is 1735098113
+PASS result.b is 14620000001
+PASS result.a is 1755098113
+PASS result.b is 14640000001
+PASS result.a is 1775098113
+PASS result.b is 14660000001
+PASS result.a is 1795098113
+PASS result.b is 14680000001
+PASS result.a is 1815098113
+PASS result.b is 14700000001
+PASS result.a is 1835098113
+PASS result.b is 14720000001
+PASS result.a is 1855098113
+PASS result.b is 14740000001
+PASS result.a is 1875098113
+PASS result.b is 14760000001
+PASS result.a is 1895098113
+PASS result.b is 14780000001
+PASS result.a is 1915098113
+PASS result.b is 14800000001
+PASS result.a is 1935098113
+PASS result.b is 14820000001
+PASS result.a is 1955098113
+PASS result.b is 14840000001
+PASS result.a is 1975098113
+PASS result.b is 14860000001
+PASS result.a is 1995098113
+PASS result.b is 14880000001
+PASS result.a is 2015098113
+PASS result.b is 14900000001
+PASS result.a is 2035098113
+PASS result.b is 14920000001
+PASS result.a is 2055098113
+PASS result.b is 14940000001
+PASS result.a is 2075098113
+PASS result.b is 14960000001
+PASS result.a is 2095098113
+PASS result.b is 14980000001
+PASS result.a is 2115098113
+PASS result.b is 15000000001
+PASS result.a is 2135098113
+PASS result.b is 15020000001
+PASS result.a is -2139869183
+PASS result.b is 15040000001
+PASS result.a is -2119869183
+PASS result.b is 15060000001
+PASS result.a is -2099869183
+PASS result.b is 15080000001
+PASS result.a is -2079869183
+PASS result.b is 15100000001
+PASS result.a is -2059869183
+PASS result.b is 15120000001
+PASS result.a is -2039869183
+PASS result.b is 15140000001
+PASS result.a is -2019869183
+PASS result.b is 15160000001
+PASS result.a is -1999869183
+PASS result.b is 15180000001
+PASS result.a is -1979869183
+PASS result.b is 15200000001
+PASS result.a is -1959869183
+PASS result.b is 15220000001
+PASS result.a is -1939869183
+PASS result.b is 15240000001
+PASS result.a is -1919869183
+PASS result.b is 15260000001
+PASS result.a is -1899869183
+PASS result.b is 15280000001
+PASS result.a is -1879869183
+PASS result.b is 15300000001
+PASS result.a is -1859869183
+PASS result.b is 15320000001
+PASS result.a is -1839869183
+PASS result.b is 15340000001
+PASS result.a is -1819869183
+PASS result.b is 15360000001
+PASS result.a is -1799869183
+PASS result.b is 15380000001
+PASS result.a is -1779869183
+PASS result.b is 15400000001
+PASS result.a is -1759869183
+PASS result.b is 15420000001
+PASS result.a is -1739869183
+PASS result.b is 15440000001
+PASS result.a is -1719869183
+PASS result.b is 15460000001
+PASS result.a is -1699869183
+PASS result.b is 15480000001
+PASS result.a is -1679869183
+PASS result.b is 15500000001
+PASS result.a is -1659869183
+PASS result.b is 15520000001
+PASS result.a is -1639869183
+PASS result.b is 15540000001
+PASS result.a is -1619869183
+PASS result.b is 15560000001
+PASS result.a is -1599869183
+PASS result.b is 15580000001
+PASS result.a is -1579869183
+PASS result.b is 15600000001
+PASS result.a is -1559869183
+PASS result.b is 15620000001
+PASS result.a is -1539869183
+PASS result.b is 15640000001
+PASS result.a is -1519869183
+PASS result.b is 15660000001
+PASS result.a is -1499869183
+PASS result.b is 15680000001
+PASS result.a is -1479869183
+PASS result.b is 15700000001
+PASS result.a is -1459869183
+PASS result.b is 15720000001
+PASS result.a is -1439869183
+PASS result.b is 15740000001
+PASS result.a is -1419869183
+PASS result.b is 15760000001
+PASS result.a is -1399869183
+PASS result.b is 15780000001
+PASS result.a is -1379869183
+PASS result.b is 15800000001
+PASS result.a is -1359869183
+PASS result.b is 15820000001
+PASS result.a is -1339869183
+PASS result.b is 15840000001
+PASS result.a is -1319869183
+PASS result.b is 15860000001
+PASS result.a is -1299869183
+PASS result.b is 15880000001
+PASS result.a is -1279869183
+PASS result.b is 15900000001
+PASS result.a is -1259869183
+PASS result.b is 15920000001
+PASS result.a is -1239869183
+PASS result.b is 15940000001
+PASS result.a is -1219869183
+PASS result.b is 15960000001
+PASS result.a is -1199869183
+PASS result.b is 15980000001
+PASS result.a is -1179869183
+PASS result.b is 16000000001
+PASS result.a is -1159869183
+PASS result.b is 16020000001
+PASS result.a is -1139869183
+PASS result.b is 16040000001
+PASS result.a is -1119869183
+PASS result.b is 16060000001
+PASS result.a is -1099869183
+PASS result.b is 16080000001
+PASS result.a is -1079869183
+PASS result.b is 16100000001
+PASS result.a is -1059869183
+PASS result.b is 16120000001
+PASS result.a is -1039869183
+PASS result.b is 16140000001
+PASS result.a is -1019869183
+PASS result.b is 16160000001
+PASS result.a is -999869183
+PASS result.b is 16180000001
+PASS result.a is -979869183
+PASS result.b is 16200000001
+PASS result.a is -959869183
+PASS result.b is 16220000001
+PASS result.a is -939869183
+PASS result.b is 16240000001
+PASS result.a is -919869183
+PASS result.b is 16260000001
+PASS result.a is -899869183
+PASS result.b is 16280000001
+PASS result.a is -879869183
+PASS result.b is 16300000001
+PASS result.a is -859869183
+PASS result.b is 16320000001
+PASS result.a is -839869183
+PASS result.b is 16340000001
+PASS result.a is -819869183
+PASS result.b is 16360000001
+PASS result.a is -799869183
+PASS result.b is 16380000001
+PASS result.a is -779869183
+PASS result.b is 16400000001
+PASS result.a is -759869183
+PASS result.b is 16420000001
+PASS result.a is -739869183
+PASS result.b is 16440000001
+PASS result.a is -719869183
+PASS result.b is 16460000001
+PASS result.a is -699869183
+PASS result.b is 16480000001
+PASS result.a is -679869183
+PASS result.b is 16500000001
+PASS result.a is -659869183
+PASS result.b is 16520000001
+PASS result.a is -639869183
+PASS result.b is 16540000001
+PASS result.a is -619869183
+PASS result.b is 16560000001
+PASS result.a is -599869183
+PASS result.b is 16580000001
+PASS result.a is -579869183
+PASS result.b is 16600000001
+PASS result.a is -559869183
+PASS result.b is 16620000001
+PASS result.a is -539869183
+PASS result.b is 16640000001
+PASS result.a is -519869183
+PASS result.b is 16660000001
+PASS result.a is -499869183
+PASS result.b is 16680000001
+PASS result.a is -479869183
+PASS result.b is 16700000001
+PASS result.a is -459869183
+PASS result.b is 16720000001
+PASS result.a is -439869183
+PASS result.b is 16740000001
+PASS result.a is -419869183
+PASS result.b is 16760000001
+PASS result.a is -399869183
+PASS result.b is 16780000001
+PASS result.a is -379869183
+PASS result.b is 16800000001
+PASS result.a is -359869183
+PASS result.b is 16820000001
+PASS result.a is -339869183
+PASS result.b is 16840000001
+PASS result.a is -319869183
+PASS result.b is 16860000001
+PASS result.a is -299869183
+PASS result.b is 16880000001
+PASS result.a is -279869183
+PASS result.b is 16900000001
+PASS result.a is -259869183
+PASS result.b is 16920000001
+PASS result.a is -239869183
+PASS result.b is 16940000001
+PASS result.a is -219869183
+PASS result.b is 16960000001
+PASS result.a is -199869183
+PASS result.b is 16980000001
+PASS result.a is -179869183
+PASS result.b is 17000000001
+PASS result.a is -159869183
+PASS result.b is 17020000001
+PASS result.a is -139869183
+PASS result.b is 17040000001
+PASS result.a is -119869183
+PASS result.b is 17060000001
+PASS result.a is -99869183
+PASS result.b is 17080000001
+PASS result.a is -79869183
+PASS result.b is 17100000001
+PASS result.a is -59869183
+PASS result.b is 17120000001
+PASS result.a is -39869183
+PASS result.b is 17140000001
+PASS result.a is -19869183
+PASS result.b is 17160000001
+PASS result.a is 130817
+PASS result.b is 17180000001
+PASS result.a is 20130817
+PASS result.b is 17200000001
+PASS result.a is 40130817
+PASS result.b is 17220000001
+PASS result.a is 60130817
+PASS result.b is 17240000001
+PASS result.a is 80130817
+PASS result.b is 17260000001
+PASS result.a is 100130817
+PASS result.b is 17280000001
+PASS result.a is 120130817
+PASS result.b is 17300000001
+PASS result.a is 140130817
+PASS result.b is 17320000001
+PASS result.a is 160130817
+PASS result.b is 17340000001
+PASS result.a is 180130817
+PASS result.b is 17360000001
+PASS result.a is 200130817
+PASS result.b is 17380000001
+PASS result.a is 220130817
+PASS result.b is 17400000001
+PASS result.a is 240130817
+PASS result.b is 17420000001
+PASS result.a is 260130817
+PASS result.b is 17440000001
+PASS result.a is 280130817
+PASS result.b is 17460000001
+PASS result.a is 300130817
+PASS result.b is 17480000001
+PASS result.a is 320130817
+PASS result.b is 17500000001
+PASS result.a is 340130817
+PASS result.b is 17520000001
+PASS result.a is 360130817
+PASS result.b is 17540000001
+PASS result.a is 380130817
+PASS result.b is 17560000001
+PASS result.a is 400130817
+PASS result.b is 17580000001
+PASS result.a is 420130817
+PASS result.b is 17600000001
+PASS result.a is 440130817
+PASS result.b is 17620000001
+PASS result.a is 460130817
+PASS result.b is 17640000001
+PASS result.a is 480130817
+PASS result.b is 17660000001
+PASS result.a is 500130817
+PASS result.b is 17680000001
+PASS result.a is 520130817
+PASS result.b is 17700000001
+PASS result.a is 540130817
+PASS result.b is 17720000001
+PASS result.a is 560130817
+PASS result.b is 17740000001
+PASS result.a is 580130817
+PASS result.b is 17760000001
+PASS result.a is 600130817
+PASS result.b is 17780000001
+PASS result.a is 620130817
+PASS result.b is 17800000001
+PASS result.a is 640130817
+PASS result.b is 17820000001
+PASS result.a is 660130817
+PASS result.b is 17840000001
+PASS result.a is 680130817
+PASS result.b is 17860000001
+PASS result.a is 700130817
+PASS result.b is 17880000001
+PASS result.a is 720130817
+PASS result.b is 17900000001
+PASS result.a is 740130817
+PASS result.b is 17920000001
+PASS result.a is 760130817
+PASS result.b is 17940000001
+PASS result.a is 780130817
+PASS result.b is 17960000001
+PASS result.a is 800130817
+PASS result.b is 17980000001
+PASS result.a is 820130817
+PASS result.b is 18000000001
+PASS result.a is 840130817
+PASS result.b is 18020000001
+PASS result.a is 860130817
+PASS result.b is 18040000001
+PASS result.a is 880130817
+PASS result.b is 18060000001
+PASS result.a is 900130817
+PASS result.b is 18080000001
+PASS result.a is 920130817
+PASS result.b is 18100000001
+PASS result.a is 940130817
+PASS result.b is 18120000001
+PASS result.a is 960130817
+PASS result.b is 18140000001
+PASS result.a is 980130817
+PASS result.b is 18160000001
+PASS result.a is 1000130817
+PASS result.b is 18180000001
+PASS result.a is 1020130817
+PASS result.b is 18200000001
+PASS result.a is 1040130817
+PASS result.b is 18220000001
+PASS result.a is 1060130817
+PASS result.b is 18240000001
+PASS result.a is 1080130817
+PASS result.b is 18260000001
+PASS result.a is 1100130817
+PASS result.b is 18280000001
+PASS result.a is 1120130817
+PASS result.b is 18300000001
+PASS result.a is 1140130817
+PASS result.b is 18320000001
+PASS result.a is 1160130817
+PASS result.b is 18340000001
+PASS result.a is 1180130817
+PASS result.b is 18360000001
+PASS result.a is 1200130817
+PASS result.b is 18380000001
+PASS result.a is 1220130817
+PASS result.b is 18400000001
+PASS result.a is 1240130817
+PASS result.b is 18420000001
+PASS result.a is 1260130817
+PASS result.b is 18440000001
+PASS result.a is 1280130817
+PASS result.b is 18460000001
+PASS result.a is 1300130817
+PASS result.b is 18480000001
+PASS result.a is 1320130817
+PASS result.b is 18500000001
+PASS result.a is 1340130817
+PASS result.b is 18520000001
+PASS result.a is 1360130817
+PASS result.b is 18540000001
+PASS result.a is 1380130817
+PASS result.b is 18560000001
+PASS result.a is 1400130817
+PASS result.b is 18580000001
+PASS result.a is 1420130817
+PASS result.b is 18600000001
+PASS result.a is 1440130817
+PASS result.b is 18620000001
+PASS result.a is 1460130817
+PASS result.b is 18640000001
+PASS result.a is 1480130817
+PASS result.b is 18660000001
+PASS result.a is 1500130817
+PASS result.b is 18680000001
+PASS result.a is 1520130817
+PASS result.b is 18700000001
+PASS result.a is 1540130817
+PASS result.b is 18720000001
+PASS result.a is 1560130817
+PASS result.b is 18740000001
+PASS result.a is 1580130817
+PASS result.b is 18760000001
+PASS result.a is 1600130817
+PASS result.b is 18780000001
+PASS result.a is 1620130817
+PASS result.b is 18800000001
+PASS result.a is 1640130817
+PASS result.b is 18820000001
+PASS result.a is 1660130817
+PASS result.b is 18840000001
+PASS result.a is 1680130817
+PASS result.b is 18860000001
+PASS result.a is 1700130817
+PASS result.b is 18880000001
+PASS result.a is 1720130817
+PASS result.b is 18900000001
+PASS result.a is 1740130817
+PASS result.b is 18920000001
+PASS result.a is 1760130817
+PASS result.b is 18940000001
+PASS result.a is 1780130817
+PASS result.b is 18960000001
+PASS result.a is 1800130817
+PASS result.b is 18980000001
+PASS result.a is 1820130817
+PASS result.b is 19000000001
+PASS result.a is 1840130817
+PASS result.b is 19020000001
+PASS result.a is 1860130817
+PASS result.b is 19040000001
+PASS result.a is 1880130817
+PASS result.b is 19060000001
+PASS result.a is 1900130817
+PASS result.b is 19080000001
+PASS result.a is 1920130817
+PASS result.b is 19100000001
+PASS result.a is 1940130817
+PASS result.b is 19120000001
+PASS result.a is 1960130817
+PASS result.b is 19140000001
+PASS result.a is 1980130817
+PASS result.b is 19160000001
+PASS result.a is 2000130817
+PASS result.b is 19180000001
+PASS result.a is 2020130817
+PASS result.b is 19200000001
+PASS result.a is 2040130817
+PASS result.b is 19220000001
+PASS result.a is 2060130817
+PASS result.b is 19240000001
+PASS result.a is 2080130817
+PASS result.b is 19260000001
+PASS result.a is 2100130817
+PASS result.b is 19280000001
+PASS result.a is 2120130817
+PASS result.b is 19300000001
+PASS result.a is 2140130817
+PASS result.b is 19320000001
+PASS result.a is -2134836479
+PASS result.b is 19340000001
+PASS result.a is -2114836479
+PASS result.b is 19360000001
+PASS result.a is -2094836479
+PASS result.b is 19380000001
+PASS result.a is -2074836479
+PASS result.b is 19400000001
+PASS result.a is -2054836479
+PASS result.b is 19420000001
+PASS result.a is -2034836479
+PASS result.b is 19440000001
+PASS result.a is -2014836479
+PASS result.b is 19460000001
+PASS result.a is -1994836479
+PASS result.b is 19480000001
+PASS result.a is -1974836479
+PASS result.b is 19500000001
+PASS result.a is -1954836479
+PASS result.b is 19520000001
+PASS result.a is -1934836479
+PASS result.b is 19540000001
+PASS result.a is -1914836479
+PASS result.b is 19560000001
+PASS result.a is -1894836479
+PASS result.b is 19580000001
+PASS result.a is -1874836479
+PASS result.b is 19600000001
+PASS result.a is -1854836479
+PASS result.b is 19620000001
+PASS result.a is -1834836479
+PASS result.b is 19640000001
+PASS result.a is -1814836479
+PASS result.b is 19660000001
+PASS result.a is -1794836479
+PASS result.b is 19680000001
+PASS result.a is -1774836479
+PASS result.b is 19700000001
+PASS result.a is -1754836479
+PASS result.b is 19720000001
+PASS result.a is -1734836479
+PASS result.b is 19740000001
+PASS result.a is -1714836479
+PASS result.b is 19760000001
+PASS result.a is -1694836479
+PASS result.b is 19780000001
+PASS result.a is -1674836479
+PASS result.b is 19800000001
+PASS result.a is -1654836479
+PASS result.b is 19820000001
+PASS result.a is -1634836479
+PASS result.b is 19840000001
+PASS result.a is -1614836479
+PASS result.b is 19860000001
+PASS result.a is -1594836479
+PASS result.b is 19880000001
+PASS result.a is -1574836479
+PASS result.b is 19900000001
+PASS result.a is -1554836479
+PASS result.b is 19920000001
+PASS result.a is -1534836479
+PASS result.b is 19940000001
+PASS result.a is -1514836479
+PASS result.b is 19960000001
+PASS result.a is -1494836479
+PASS result.b is 19980000001
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-integer-optimization.js b/test/webkit/dfg-integer-optimization.js
new file mode 100644 (file)
index 0000000..31ec8fc
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that integer addition optimizations in the DFG are not performed too overzealously."
+);
+
+function doAdd(a,b) {
+    // The point of this test is to see if the DFG CSE's the second (a + b) against the first, after
+    // optimizing the first to be an integer addition. The first one certainly is an integer addition,
+    // but the second one isn't - it must either be an integer addition with overflow checking, or a
+    // double addition.
+    return {a:((a + b) | 0), b:(a + b)};
+}
+
+for (var i = 0; i < 1000; ++i) {
+    // Create numbers big enough that we'll start seeing doubles only after about 200 invocations.
+    var a = i * 1000 * 1000 * 10;
+    var b = i * 1000 * 1000 * 10 + 1;
+    var result = doAdd(a, b);
+
+    // Use eval() for computing the correct result, to force execution to happen outside the DFG.
+    shouldBe("result.a", "" + eval("((" + a + " + " + b + ") | 0)"))
+    shouldBe("result.b", "" + eval(a + " + " + b))
+}
+
diff --git a/test/webkit/dfg-intrinsic-osr-exit-expected.txt b/test/webkit/dfg-intrinsic-osr-exit-expected.txt
new file mode 100644 (file)
index 0000000..277a118
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that an OSR exit inside of an intrinsic that was not loaded with a method check works correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo([Math.abs], {f:5}) is 5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS foo([Math.abs], {f:5.5}) is 5.5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-intrinsic-osr-exit.js b/test/webkit/dfg-intrinsic-osr-exit.js
new file mode 100644 (file)
index 0000000..4ac756c
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that an OSR exit inside of an intrinsic that was not loaded with a method check works correctly."
+);
+
+function foo(a,b) {
+    return a[0](b.f);
+}
+
+for (var i = 0; i < 100; ++i)
+    foo([Math.abs], {f:5});
+
+shouldBe("foo([Math.abs], {f:5})", "5");
+
+for (var i = 0; i < 10; ++i)
+    shouldBe("foo([Math.abs], {f:5.5})", "5.5");
+
+var successfullyParsed = true;
diff --git a/test/webkit/dfg-intrinsic-side-effect-assignment-osr-exit-expected.txt b/test/webkit/dfg-intrinsic-side-effect-assignment-osr-exit-expected.txt
new file mode 100644 (file)
index 0000000..6b3e79d
--- /dev/null
@@ -0,0 +1,532 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens if we OSR exit on an assignment that was part of a side-effecting intrinsic.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is "bleh"
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS foo(array) is 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-intrinsic-side-effect-assignment-osr-exit.js b/test/webkit/dfg-intrinsic-side-effect-assignment-osr-exit.js
new file mode 100644 (file)
index 0000000..4a32738
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens if we OSR exit on an assignment that was part of a side-effecting intrinsic."
+);
+
+function foo(array) {
+    var x = array.pop();
+    if (x)
+        return x;
+}
+
+for (var i = 0; i < 500; ++i) {
+    var array = [];
+    if (i == 50)
+        array.x = 42;
+    array.push("blah");
+    var expected;
+    if (i >= 450) {
+        array.push(2);
+        expected = "2";
+    } else {
+        array.push("bleh");
+        expected = "\"bleh\"";
+    }
+    shouldBe("foo(array)", expected);
+}
+
diff --git a/test/webkit/dfg-intrinsic-unused-this-expected.txt b/test/webkit/dfg-intrinsic-unused-this-expected.txt
new file mode 100644 (file)
index 0000000..dfebfbb
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that doing intrinsic function optimization does not result in this being lost entirely.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS baz(object, 0, 0) is 0
+PASS baz(object, 1, 2) is 2
+PASS baz(object, 2, 4) is 4
+PASS baz(object, 3, 6) is 6
+PASS baz(object, 4, 8) is 8
+PASS baz(object, 5, 10) is 10
+PASS baz(object, 6, 12) is 12
+PASS baz(object, 7, 14) is 14
+PASS baz(object, 8, 16) is 16
+PASS baz(object, 9, 18) is 18
+PASS baz(object, 10, 20) is 20
+PASS baz(object, 11, 22) is 22
+PASS baz(object, 12, 24) is 24
+PASS baz(object, 13, 26) is 26
+PASS baz(object, 14, 28) is 28
+PASS baz(object, 15, 30) is 30
+PASS baz(object, 16, 32) is 32
+PASS baz(object, 17, 34) is 34
+PASS baz(object, 18, 36) is 36
+PASS baz(object, 19, 38) is 38
+PASS baz(object, 20, 40) is 40
+PASS baz(object, 21, 42) is 42
+PASS baz(object, 22, 44) is 44
+PASS baz(object, 23, 46) is 46
+PASS baz(object, 24, 48) is 48
+PASS baz(object, 25, 50) is 50
+PASS baz(object, 26, 52) is 52
+PASS baz(object, 27, 54) is 54
+PASS baz(object, 28, 56) is 56
+PASS baz(object, 29, 58) is 58
+PASS baz(object, 30, 60) is 60
+PASS baz(object, 31, 62) is 62
+PASS baz(object, 32, 64) is 64
+PASS baz(object, 33, 66) is 66
+PASS baz(object, 34, 68) is 68
+PASS baz(object, 35, 70) is 70
+PASS baz(object, 36, 72) is 72
+PASS baz(object, 37, 74) is 74
+PASS baz(object, 38, 76) is 76
+PASS baz(object, 39, 78) is 78
+PASS baz(object, 40, 80) is 80
+PASS baz(object, 41, 82) is 82
+PASS baz(object, 42, 84) is 84
+PASS baz(object, 43, 86) is 86
+PASS baz(object, 44, 88) is 88
+PASS baz(object, 45, 90) is 90
+PASS baz(object, 46, 92) is 92
+PASS baz(object, 47, 94) is 94
+PASS baz(object, 48, 96) is 96
+PASS baz(object, 49, 98) is 98
+PASS baz(object, 50, 100) is 100
+PASS baz(object, 51, 102) is 102
+PASS baz(object, 52, 104) is 104
+PASS baz(object, 53, 106) is 106
+PASS baz(object, 54, 108) is 108
+PASS baz(object, 55, 110) is 110
+PASS baz(object, 56, 112) is 112
+PASS baz(object, 57, 114) is 114
+PASS baz(object, 58, 116) is 116
+PASS baz(object, 59, 118) is 118
+PASS baz(object, 60, 120) is 120
+PASS baz(object, 61, 122) is 122
+PASS baz(object, 62, 124) is 124
+PASS baz(object, 63, 126) is 126
+PASS baz(object, 64, 128) is 128
+PASS baz(object, 65, 130) is 130
+PASS baz(object, 66, 132) is 132
+PASS baz(object, 67, 134) is 134
+PASS baz(object, 68, 136) is 136
+PASS baz(object, 69, 138) is 138
+PASS baz(object, 70, 140) is 140
+PASS baz(object, 71, 142) is 142
+PASS baz(object, 72, 144) is 144
+PASS baz(object, 73, 146) is 146
+PASS baz(object, 74, 148) is 148
+PASS baz(object, 75, 150) is 150
+PASS baz(object, 76, 152) is 152
+PASS baz(object, 77, 154) is 154
+PASS baz(object, 78, 156) is 156
+PASS baz(object, 79, 158) is 158
+PASS baz(object, 80, 160) is 160
+PASS baz(object, 81, 162) is 162
+PASS baz(object, 82, 164) is 164
+PASS baz(object, 83, 166) is 166
+PASS baz(object, 84, 168) is 168
+PASS baz(object, 85, 170) is 170
+PASS baz(object, 86, 172) is 172
+PASS baz(object, 87, 174) is 174
+PASS baz(object, 88, 176) is 176
+PASS baz(object, 89, 178) is 178
+PASS baz(object, 90, 180) is 180
+PASS baz(object, 91, 182) is 182
+PASS baz(object, 92, 184) is 184
+PASS baz(object, 93, 186) is 186
+PASS baz(object, 94, 188) is 188
+PASS baz(object, 95, 190) is 190
+PASS baz(object, 96, 192) is 192
+PASS baz(object, 97, 194) is 194
+PASS baz(object, 98, 196) is 196
+PASS baz(object, 99, 198) is 198
+PASS baz(object, 100, 200) is 200
+PASS baz(object, 101, 202) is 202
+PASS baz(object, 102, 204) is 204
+PASS baz(object, 103, 206) is 206
+PASS baz(object, 104, 208) is 208
+PASS baz(object, 105, 210) is 210
+PASS baz(object, 106, 212) is 212
+PASS baz(object, 107, 214) is 214
+PASS baz(object, 108, 216) is 216
+PASS baz(object, 109, 218) is 218
+PASS baz(object, 110, 220) is 220
+PASS baz(object, 111, 222) is 222
+PASS baz(object, 112, 224) is 224
+PASS baz(object, 113, 226) is 226
+PASS baz(object, 114, 228) is 228
+PASS baz(object, 115, 230) is 230
+PASS baz(object, 116, 232) is 232
+PASS baz(object, 117, 234) is 234
+PASS baz(object, 118, 236) is 236
+PASS baz(object, 119, 238) is 238
+PASS baz(object, 120, 240) is 240
+PASS baz(object, 121, 242) is 242
+PASS baz(object, 122, 244) is 244
+PASS baz(object, 123, 246) is 246
+PASS baz(object, 124, 248) is 248
+PASS baz(object, 125, 250) is 250
+PASS baz(object, 126, 252) is 252
+PASS baz(object, 127, 254) is 254
+PASS baz(object, 128, 256) is 256
+PASS baz(object, 129, 258) is 258
+PASS baz(object, 130, 260) is 260
+PASS baz(object, 131, 262) is 262
+PASS baz(object, 132, 264) is 264
+PASS baz(object, 133, 266) is 266
+PASS baz(object, 134, 268) is 268
+PASS baz(object, 135, 270) is 270
+PASS baz(object, 136, 272) is 272
+PASS baz(object, 137, 274) is 274
+PASS baz(object, 138, 276) is 276
+PASS baz(object, 139, 278) is 278
+PASS baz(object, 140, 280) is 280
+PASS baz(object, 141, 282) is 282
+PASS baz(object, 142, 284) is 284
+PASS baz(object, 143, 286) is 286
+PASS baz(object, 144, 288) is 288
+PASS baz(object, 145, 290) is 290
+PASS baz(object, 146, 292) is 292
+PASS baz(object, 147, 294) is 294
+PASS baz(object, 148, 296) is 296
+PASS baz(object, 149, 298) is 298
+PASS baz(object, 150, 300) is 300
+PASS baz(object, 151, 302) is 302
+PASS baz(object, 152, 304) is 304
+PASS baz(object, 153, 306) is 306
+PASS baz(object, 154, 308) is 308
+PASS baz(object, 155, 310) is 310
+PASS baz(object, 156, 312) is 312
+PASS baz(object, 157, 314) is 314
+PASS baz(object, 158, 316) is 316
+PASS baz(object, 159, 318) is 318
+PASS baz(object, 160, 320) is 320
+PASS baz(object, 161, 322) is 322
+PASS baz(object, 162, 324) is 324
+PASS baz(object, 163, 326) is 326
+PASS baz(object, 164, 328) is 328
+PASS baz(object, 165, 330) is 330
+PASS baz(object, 166, 332) is 332
+PASS baz(object, 167, 334) is 334
+PASS baz(object, 168, 336) is 336
+PASS baz(object, 169, 338) is 338
+PASS baz(object, 170, 340) is 340
+PASS baz(object, 171, 342) is 342
+PASS baz(object, 172, 344) is 344
+PASS baz(object, 173, 346) is 346
+PASS baz(object, 174, 348) is 348
+PASS baz(object, 175, 350) is 350
+PASS baz(object, 176, 352) is 352
+PASS baz(object, 177, 354) is 354
+PASS baz(object, 178, 356) is 356
+PASS baz(object, 179, 358) is 358
+PASS baz(object, 180, 360) is 360
+PASS baz(object, 181, 362) is 362
+PASS baz(object, 182, 364) is 364
+PASS baz(object, 183, 366) is 366
+PASS baz(object, 184, 368) is 368
+PASS baz(object, 185, 370) is 370
+PASS baz(object, 186, 372) is 372
+PASS baz(object, 187, 374) is 374
+PASS baz(object, 188, 376) is 376
+PASS baz(object, 189, 378) is 378
+PASS baz(object, 190, 380) is 380
+PASS baz(object, 191, 382) is 382
+PASS baz(object, 192, 384) is 384
+PASS baz(object, 193, 386) is 386
+PASS baz(object, 194, 388) is 388
+PASS baz(object, 195, 390) is 390
+PASS baz(object, 196, 392) is 392
+PASS baz(object, 197, 394) is 394
+PASS baz(object, 198, 396) is 396
+PASS baz(object, 199, 398) is 398
+PASS baz(object, 200, 400) is 400
+PASS baz(object, 201, 402) is 402
+PASS baz(object, 202, 404) is 404
+PASS baz(object, 203, 406) is 406
+PASS baz(object, 204, 408) is 408
+PASS baz(object, 205, 410) is 410
+PASS baz(object, 206, 412) is 412
+PASS baz(object, 207, 414) is 414
+PASS baz(object, 208, 416) is 416
+PASS baz(object, 209, 418) is 418
+PASS baz(object, 210, 420) is 420
+PASS baz(object, 211, 422) is 422
+PASS baz(object, 212, 424) is 424
+PASS baz(object, 213, 426) is 426
+PASS baz(object, 214, 428) is 428
+PASS baz(object, 215, 430) is 430
+PASS baz(object, 216, 432) is 432
+PASS baz(object, 217, 434) is 434
+PASS baz(object, 218, 436) is 436
+PASS baz(object, 219, 438) is 438
+PASS baz(object, 220, 440) is 440
+PASS baz(object, 221, 442) is 442
+PASS baz(object, 222, 444) is 444
+PASS baz(object, 223, 446) is 446
+PASS baz(object, 224, 448) is 448
+PASS baz(object, 225, 450) is 450
+PASS baz(object, 226, 452) is 452
+PASS baz(object, 227, 454) is 454
+PASS baz(object, 228, 456) is 456
+PASS baz(object, 229, 458) is 458
+PASS baz(object, 230, 460) is 460
+PASS baz(object, 231, 462) is 462
+PASS baz(object, 232, 464) is 464
+PASS baz(object, 233, 466) is 466
+PASS baz(object, 234, 468) is 468
+PASS baz(object, 235, 470) is 470
+PASS baz(object, 236, 472) is 472
+PASS baz(object, 237, 474) is 474
+PASS baz(object, 238, 476) is 476
+PASS baz(object, 239, 478) is 478
+PASS baz(object, 240, 480) is 480
+PASS baz(object, 241, 482) is 482
+PASS baz(object, 242, 484) is 484
+PASS baz(object, 243, 486) is 486
+PASS baz(object, 244, 488) is 488
+PASS baz(object, 245, 490) is 490
+PASS baz(object, 246, 492) is 492
+PASS baz(object, 247, 494) is 494
+PASS baz(object, 248, 496) is 496
+PASS baz(object, 249, 498) is 498
+PASS baz(object, 250, 500) is 500
+PASS baz(object, 251, 502) is 502
+PASS baz(object, 252, 504) is 504
+PASS baz(object, 253, 506) is 506
+PASS baz(object, 254, 508) is 508
+PASS baz(object, 255, 510) is 510
+PASS baz(object, 256, 512) is 512
+PASS baz(object, 257, 514) is 514
+PASS baz(object, 258, 516) is 516
+PASS baz(object, 259, 518) is 518
+PASS baz(object, 260, 520) is 520
+PASS baz(object, 261, 522) is 522
+PASS baz(object, 262, 524) is 524
+PASS baz(object, 263, 526) is 526
+PASS baz(object, 264, 528) is 528
+PASS baz(object, 265, 530) is 530
+PASS baz(object, 266, 532) is 532
+PASS baz(object, 267, 534) is 534
+PASS baz(object, 268, 536) is 536
+PASS baz(object, 269, 538) is 538
+PASS baz(object, 270, 540) is 540
+PASS baz(object, 271, 542) is 542
+PASS baz(object, 272, 544) is 544
+PASS baz(object, 273, 546) is 546
+PASS baz(object, 274, 548) is 548
+PASS baz(object, 275, 550) is 550
+PASS baz(object, 276, 552) is 552
+PASS baz(object, 277, 554) is 554
+PASS baz(object, 278, 556) is 556
+PASS baz(object, 279, 558) is 558
+PASS baz(object, 280, 560) is 560
+PASS baz(object, 281, 562) is 562
+PASS baz(object, 282, 564) is 564
+PASS baz(object, 283, 566) is 566
+PASS baz(object, 284, 568) is 568
+PASS baz(object, 285, 570) is 570
+PASS baz(object, 286, 572) is 572
+PASS baz(object, 287, 574) is 574
+PASS baz(object, 288, 576) is 576
+PASS baz(object, 289, 578) is 578
+PASS baz(object, 290, 580) is 580
+PASS baz(object, 291, 582) is 582
+PASS baz(object, 292, 584) is 584
+PASS baz(object, 293, 586) is 586
+PASS baz(object, 294, 588) is 588
+PASS baz(object, 295, 590) is 590
+PASS baz(object, 296, 592) is 592
+PASS baz(object, 297, 594) is 594
+PASS baz(object, 298, 596) is 596
+PASS baz(object, 299, 598) is 598
+PASS baz(object, 300, 600) is 600
+PASS baz(object, 301, 602) is 602
+PASS baz(object, 302, 604) is 604
+PASS baz(object, 303, 606) is 606
+PASS baz(object, 304, 608) is 608
+PASS baz(object, 305, 610) is 610
+PASS baz(object, 306, 612) is 612
+PASS baz(object, 307, 614) is 614
+PASS baz(object, 308, 616) is 616
+PASS baz(object, 309, 618) is 618
+PASS baz(object, 310, 620) is 620
+PASS baz(object, 311, 622) is 622
+PASS baz(object, 312, 624) is 624
+PASS baz(object, 313, 626) is 626
+PASS baz(object, 314, 628) is 628
+PASS baz(object, 315, 630) is 630
+PASS baz(object, 316, 632) is 632
+PASS baz(object, 317, 634) is 634
+PASS baz(object, 318, 636) is 636
+PASS baz(object, 319, 638) is 638
+PASS baz(object, 320, 640) is 640
+PASS baz(object, 321, 642) is 642
+PASS baz(object, 322, 644) is 644
+PASS baz(object, 323, 646) is 646
+PASS baz(object, 324, 648) is 648
+PASS baz(object, 325, 650) is 650
+PASS baz(object, 326, 652) is 652
+PASS baz(object, 327, 654) is 654
+PASS baz(object, 328, 656) is 656
+PASS baz(object, 329, 658) is 658
+PASS baz(object, 330, 660) is 660
+PASS baz(object, 331, 662) is 662
+PASS baz(object, 332, 664) is 664
+PASS baz(object, 333, 666) is 666
+PASS baz(object, 334, 668) is 668
+PASS baz(object, 335, 670) is 670
+PASS baz(object, 336, 672) is 672
+PASS baz(object, 337, 674) is 674
+PASS baz(object, 338, 676) is 676
+PASS baz(object, 339, 678) is 678
+PASS baz(object, 340, 680) is 680
+PASS baz(object, 341, 682) is 682
+PASS baz(object, 342, 684) is 684
+PASS baz(object, 343, 686) is 686
+PASS baz(object, 344, 688) is 688
+PASS baz(object, 345, 690) is 690
+PASS baz(object, 346, 692) is 692
+PASS baz(object, 347, 694) is 694
+PASS baz(object, 348, 696) is 696
+PASS baz(object, 349, 698) is 698
+PASS baz(object, 350, 700) is 700
+PASS baz(object, 351, 702) is 702
+PASS baz(object, 352, 704) is 704
+PASS baz(object, 353, 706) is 706
+PASS baz(object, 354, 708) is 708
+PASS baz(object, 355, 710) is 710
+PASS baz(object, 356, 712) is 712
+PASS baz(object, 357, 714) is 714
+PASS baz(object, 358, 716) is 716
+PASS baz(object, 359, 718) is 718
+PASS baz(object, 360, 720) is 720
+PASS baz(object, 361, 722) is 722
+PASS baz(object, 362, 724) is 724
+PASS baz(object, 363, 726) is 726
+PASS baz(object, 364, 728) is 728
+PASS baz(object, 365, 730) is 730
+PASS baz(object, 366, 732) is 732
+PASS baz(object, 367, 734) is 734
+PASS baz(object, 368, 736) is 736
+PASS baz(object, 369, 738) is 738
+PASS baz(object, 370, 740) is 740
+PASS baz(object, 371, 742) is 742
+PASS baz(object, 372, 744) is 744
+PASS baz(object, 373, 746) is 746
+PASS baz(object, 374, 748) is 748
+PASS baz(object, 375, 750) is 750
+PASS baz(object, 376, 752) is 752
+PASS baz(object, 377, 754) is 754
+PASS baz(object, 378, 756) is 756
+PASS baz(object, 379, 758) is 758
+PASS baz(object, 380, 760) is 760
+PASS baz(object, 381, 762) is 762
+PASS baz(object, 382, 764) is 764
+PASS baz(object, 383, 766) is 766
+PASS baz(object, 384, 768) is 768
+PASS baz(object, 385, 770) is 770
+PASS baz(object, 386, 772) is 772
+PASS baz(object, 387, 774) is 774
+PASS baz(object, 388, 776) is 776
+PASS baz(object, 389, 778) is 778
+PASS baz(object, 390, 780) is 780
+PASS baz(object, 391, 782) is 782
+PASS baz(object, 392, 784) is 784
+PASS baz(object, 393, 786) is 786
+PASS baz(object, 394, 788) is 788
+PASS baz(object, 395, 790) is 790
+PASS baz(object, 396, 792) is 792
+PASS baz(object, 397, 794) is 794
+PASS baz(object, 398, 796) is 796
+PASS baz(object, 399, 798) is 798
+PASS baz(object, 400, 800) is 800
+PASS baz(object, 401, 802) is 802
+PASS baz(object, 402, 804) is 804
+PASS baz(object, 403, 806) is 806
+PASS baz(object, 404, 808) is 808
+PASS baz(object, 405, 810) is 810
+PASS baz(object, 406, 812) is 812
+PASS baz(object, 407, 814) is 814
+PASS baz(object, 408, 816) is 816
+PASS baz(object, 409, 818) is 818
+PASS baz(object, 410, 820) is 820
+PASS baz(object, 411, 822) is 822
+PASS baz(object, 412, 824) is 824
+PASS baz(object, 413, 826) is 826
+PASS baz(object, 414, 828) is 828
+PASS baz(object, 415, 830) is 830
+PASS baz(object, 416, 832) is 832
+PASS baz(object, 417, 834) is 834
+PASS baz(object, 418, 836) is 836
+PASS baz(object, 419, 838) is 838
+PASS baz(object, 420, 840) is 840
+PASS baz(object, 421, 842) is 842
+PASS baz(object, 422, 844) is 844
+PASS baz(object, 423, 846) is 846
+PASS baz(object, 424, 848) is 848
+PASS baz(object, 425, 850) is 850
+PASS baz(object, 426, 852) is 852
+PASS baz(object, 427, 854) is 854
+PASS baz(object, 428, 856) is 856
+PASS baz(object, 429, 858) is 858
+PASS baz(object, 430, 860) is 860
+PASS baz(object, 431, 862) is 862
+PASS baz(object, 432, 864) is 864
+PASS baz(object, 433, 866) is 866
+PASS baz(object, 434, 868) is 868
+PASS baz(object, 435, 870) is 870
+PASS baz(object, 436, 872) is 872
+PASS baz(object, 437, 874) is 874
+PASS baz(object, 438, 876) is 876
+PASS baz(object, 439, 878) is 878
+PASS baz(object, 440, 880) is 880
+PASS baz(object, 441, 882) is 882
+PASS baz(object, 442, 884) is 884
+PASS baz(object, 443, 886) is 886
+PASS baz(object, 444, 888) is 888
+PASS baz(object, 445, 890) is 890
+PASS baz(object, 446, 892) is 892
+PASS baz(object, 447, 894) is 894
+PASS baz(object, 448, 896) is 896
+PASS baz(object, 449, 898) is 898
+PASS baz(object, 450, 900) is 900
+PASS baz(object, 451, 902) is 902
+PASS baz(object, 452, 904) is 904
+PASS baz(object, 453, 906) is 906
+PASS baz(object, 454, 908) is 908
+PASS baz(object, 455, 910) is 910
+PASS baz(object, 456, 912) is 912
+PASS baz(object, 457, 914) is 914
+PASS baz(object, 458, 916) is 916
+PASS baz(object, 459, 918) is 918
+PASS baz(object, 460, 920) is 920
+PASS baz(object, 461, 922) is 922
+PASS baz(object, 462, 924) is 924
+PASS baz(object, 463, 926) is 926
+PASS baz(object, 464, 928) is 928
+PASS baz(object, 465, 930) is 930
+PASS baz(object, 466, 932) is 932
+PASS baz(object, 467, 934) is 934
+PASS baz(object, 468, 936) is 936
+PASS baz(object, 469, 938) is 938
+PASS baz(object, 470, 940) is 940
+PASS baz(object, 471, 942) is 942
+PASS baz(object, 472, 944) is 944
+PASS baz(object, 473, 946) is 946
+PASS baz(object, 474, 948) is 948
+PASS baz(object, 475, 950) is 950
+PASS baz(object, 476, 952) is 952
+PASS baz(object, 477, 954) is 954
+PASS baz(object, 478, 956) is 956
+PASS baz(object, 479, 958) is 958
+PASS baz(object, 480, 960) is 960
+PASS baz(object, 481, 962) is 962
+PASS baz(object, 482, 964) is 964
+PASS baz(object, 483, 966) is 966
+PASS baz(object, 484, 968) is 968
+PASS baz(object, 485, 970) is 970
+PASS baz(object, 486, 972) is 972
+PASS baz(object, 487, 974) is 974
+PASS baz(object, 488, 976) is 976
+PASS baz(object, 489, 978) is 978
+PASS baz(object, 490, 980) is 980
+PASS baz(object, 491, 982) is 982
+PASS baz(object, 492, 984) is 984
+PASS baz(object, 493, 986) is 986
+PASS baz(object, 494, 988) is 988
+PASS baz(object, 495, 990) is 990
+PASS baz(object, 496, 992) is 992
+PASS baz(object, 497, 994) is 994
+PASS baz(object, 498, 996) is 996
+PASS baz(object, 499, 998) is 998
+PASS baz(object, 500, 1000) is 1000
+PASS baz(object, 501, 1002) is 1002
+PASS baz(object, 502, 1004) is 1004
+PASS baz(object, 503, 1006) is 1006
+PASS baz(object, 504, 1008) is 1008
+PASS baz(object, 505, 1010) is 1010
+PASS baz(object, 506, 1012) is 1012
+PASS baz(object, 507, 1014) is 1014
+PASS baz(object, 508, 1016) is 1016
+PASS baz(object, 509, 1018) is 1018
+PASS baz(object, 510, 1020) is 1020
+PASS baz(object, 511, 1022) is 1022
+PASS baz(object, 512, 1024) is 1024
+PASS baz(object, 513, 1026) is 1026
+PASS baz(object, 514, 1028) is 1028
+PASS baz(object, 515, 1030) is 1030
+PASS baz(object, 516, 1032) is 1032
+PASS baz(object, 517, 1034) is 1034
+PASS baz(object, 518, 1036) is 1036
+PASS baz(object, 519, 1038) is 1038
+PASS baz(object, 520, 1040) is 1040
+PASS baz(object, 521, 1042) is 1042
+PASS baz(object, 522, 1044) is 1044
+PASS baz(object, 523, 1046) is 1046
+PASS baz(object, 524, 1048) is 1048
+PASS baz(object, 525, 1050) is 1050
+PASS baz(object, 526, 1052) is 1052
+PASS baz(object, 527, 1054) is 1054
+PASS baz(object, 528, 1056) is 1056
+PASS baz(object, 529, 1058) is 1058
+PASS baz(object, 530, 1060) is 1060
+PASS baz(object, 531, 1062) is 1062
+PASS baz(object, 532, 1064) is 1064
+PASS baz(object, 533, 1066) is 1066
+PASS baz(object, 534, 1068) is 1068
+PASS baz(object, 535, 1070) is 1070
+PASS baz(object, 536, 1072) is 1072
+PASS baz(object, 537, 1074) is 1074
+PASS baz(object, 538, 1076) is 1076
+PASS baz(object, 539, 1078) is 1078
+PASS baz(object, 540, 1080) is 1080
+PASS baz(object, 541, 1082) is 1082
+PASS baz(object, 542, 1084) is 1084
+PASS baz(object, 543, 1086) is 1086
+PASS baz(object, 544, 1088) is 1088
+PASS baz(object, 545, 1090) is 1090
+PASS baz(object, 546, 1092) is 1092
+PASS baz(object, 547, 1094) is 1094
+PASS baz(object, 548, 1096) is 1096
+PASS baz(object, 549, 1098) is 1098
+PASS baz(object, 550, 1100) is 1100
+PASS baz(object, 551, 1102) is 1102
+PASS baz(object, 552, 1104) is 1104
+PASS baz(object, 553, 1106) is 1106
+PASS baz(object, 554, 1108) is 1108
+PASS baz(object, 555, 1110) is 1110
+PASS baz(object, 556, 1112) is 1112
+PASS baz(object, 557, 1114) is 1114
+PASS baz(object, 558, 1116) is 1116
+PASS baz(object, 559, 1118) is 1118
+PASS baz(object, 560, 1120) is 1120
+PASS baz(object, 561, 1122) is 1122
+PASS baz(object, 562, 1124) is 1124
+PASS baz(object, 563, 1126) is 1126
+PASS baz(object, 564, 1128) is 1128
+PASS baz(object, 565, 1130) is 1130
+PASS baz(object, 566, 1132) is 1132
+PASS baz(object, 567, 1134) is 1134
+PASS baz(object, 568, 1136) is 1136
+PASS baz(object, 569, 1138) is 1138
+PASS baz(object, 570, 1140) is 1140
+PASS baz(object, 571, 1142) is 1142
+PASS baz(object, 572, 1144) is 1144
+PASS baz(object, 573, 1146) is 1146
+PASS baz(object, 574, 1148) is 1148
+PASS baz(object, 575, 1150) is 1150
+PASS baz(object, 576, 1152) is 1152
+PASS baz(object, 577, 1154) is 1154
+PASS baz(object, 578, 1156) is 1156
+PASS baz(object, 579, 1158) is 1158
+PASS baz(object, 580, 1160) is 1160
+PASS baz(object, 581, 1162) is 1162
+PASS baz(object, 582, 1164) is 1164
+PASS baz(object, 583, 1166) is 1166
+PASS baz(object, 584, 1168) is 1168
+PASS baz(object, 585, 1170) is 1170
+PASS baz(object, 586, 1172) is 1172
+PASS baz(object, 587, 1174) is 1174
+PASS baz(object, 588, 1176) is 1176
+PASS baz(object, 589, 1178) is 1178
+PASS baz(object, 590, 1180) is 1180
+PASS baz(object, 591, 1182) is 1182
+PASS baz(object, 592, 1184) is 1184
+PASS baz(object, 593, 1186) is 1186
+PASS baz(object, 594, 1188) is 1188
+PASS baz(object, 595, 1190) is 1190
+PASS baz(object, 596, 1192) is 1192
+PASS baz(object, 597, 1194) is 1194
+PASS baz(object, 598, 1196) is 1196
+PASS baz(object, 599, 1198) is 1198
+PASS baz(object, 600, 1200) is 1242
+PASS baz(object, 601, 1202) is 1244
+PASS baz(object, 602, 1204) is 1246
+PASS baz(object, 603, 1206) is 1248
+PASS baz(object, 604, 1208) is 1250
+PASS baz(object, 605, 1210) is 1252
+PASS baz(object, 606, 1212) is 1254
+PASS baz(object, 607, 1214) is 1256
+PASS baz(object, 608, 1216) is 1258
+PASS baz(object, 609, 1218) is 1260
+PASS baz(object, 610, 1220) is 1262
+PASS baz(object, 611, 1222) is 1264
+PASS baz(object, 612, 1224) is 1266
+PASS baz(object, 613, 1226) is 1268
+PASS baz(object, 614, 1228) is 1270
+PASS baz(object, 615, 1230) is 1272
+PASS baz(object, 616, 1232) is 1274
+PASS baz(object, 617, 1234) is 1276
+PASS baz(object, 618, 1236) is 1278
+PASS baz(object, 619, 1238) is 1280
+PASS baz(object, 620, 1240) is 1282
+PASS baz(object, 621, 1242) is 1284
+PASS baz(object, 622, 1244) is 1286
+PASS baz(object, 623, 1246) is 1288
+PASS baz(object, 624, 1248) is 1290
+PASS baz(object, 625, 1250) is 1292
+PASS baz(object, 626, 1252) is 1294
+PASS baz(object, 627, 1254) is 1296
+PASS baz(object, 628, 1256) is 1298
+PASS baz(object, 629, 1258) is 1300
+PASS baz(object, 630, 1260) is 1302
+PASS baz(object, 631, 1262) is 1304
+PASS baz(object, 632, 1264) is 1306
+PASS baz(object, 633, 1266) is 1308
+PASS baz(object, 634, 1268) is 1310
+PASS baz(object, 635, 1270) is 1312
+PASS baz(object, 636, 1272) is 1314
+PASS baz(object, 637, 1274) is 1316
+PASS baz(object, 638, 1276) is 1318
+PASS baz(object, 639, 1278) is 1320
+PASS baz(object, 640, 1280) is 1322
+PASS baz(object, 641, 1282) is 1324
+PASS baz(object, 642, 1284) is 1326
+PASS baz(object, 643, 1286) is 1328
+PASS baz(object, 644, 1288) is 1330
+PASS baz(object, 645, 1290) is 1332
+PASS baz(object, 646, 1292) is 1334
+PASS baz(object, 647, 1294) is 1336
+PASS baz(object, 648, 1296) is 1338
+PASS baz(object, 649, 1298) is 1340
+PASS baz(object, 650, 1300) is 1342
+PASS baz(object, 651, 1302) is 1344
+PASS baz(object, 652, 1304) is 1346
+PASS baz(object, 653, 1306) is 1348
+PASS baz(object, 654, 1308) is 1350
+PASS baz(object, 655, 1310) is 1352
+PASS baz(object, 656, 1312) is 1354
+PASS baz(object, 657, 1314) is 1356
+PASS baz(object, 658, 1316) is 1358
+PASS baz(object, 659, 1318) is 1360
+PASS baz(object, 660, 1320) is 1362
+PASS baz(object, 661, 1322) is 1364
+PASS baz(object, 662, 1324) is 1366
+PASS baz(object, 663, 1326) is 1368
+PASS baz(object, 664, 1328) is 1370
+PASS baz(object, 665, 1330) is 1372
+PASS baz(object, 666, 1332) is 1374
+PASS baz(object, 667, 1334) is 1376
+PASS baz(object, 668, 1336) is 1378
+PASS baz(object, 669, 1338) is 1380
+PASS baz(object, 670, 1340) is 1382
+PASS baz(object, 671, 1342) is 1384
+PASS baz(object, 672, 1344) is 1386
+PASS baz(object, 673, 1346) is 1388
+PASS baz(object, 674, 1348) is 1390
+PASS baz(object, 675, 1350) is 1392
+PASS baz(object, 676, 1352) is 1394
+PASS baz(object, 677, 1354) is 1396
+PASS baz(object, 678, 1356) is 1398
+PASS baz(object, 679, 1358) is 1400
+PASS baz(object, 680, 1360) is 1402
+PASS baz(object, 681, 1362) is 1404
+PASS baz(object, 682, 1364) is 1406
+PASS baz(object, 683, 1366) is 1408
+PASS baz(object, 684, 1368) is 1410
+PASS baz(object, 685, 1370) is 1412
+PASS baz(object, 686, 1372) is 1414
+PASS baz(object, 687, 1374) is 1416
+PASS baz(object, 688, 1376) is 1418
+PASS baz(object, 689, 1378) is 1420
+PASS baz(object, 690, 1380) is 1422
+PASS baz(object, 691, 1382) is 1424
+PASS baz(object, 692, 1384) is 1426
+PASS baz(object, 693, 1386) is 1428
+PASS baz(object, 694, 1388) is 1430
+PASS baz(object, 695, 1390) is 1432
+PASS baz(object, 696, 1392) is 1434
+PASS baz(object, 697, 1394) is 1436
+PASS baz(object, 698, 1396) is 1438
+PASS baz(object, 699, 1398) is 1440
+PASS baz(object, 700, 1400) is 1442
+PASS baz(object, 701, 1402) is 1444
+PASS baz(object, 702, 1404) is 1446
+PASS baz(object, 703, 1406) is 1448
+PASS baz(object, 704, 1408) is 1450
+PASS baz(object, 705, 1410) is 1452
+PASS baz(object, 706, 1412) is 1454
+PASS baz(object, 707, 1414) is 1456
+PASS baz(object, 708, 1416) is 1458
+PASS baz(object, 709, 1418) is 1460
+PASS baz(object, 710, 1420) is 1462
+PASS baz(object, 711, 1422) is 1464
+PASS baz(object, 712, 1424) is 1466
+PASS baz(object, 713, 1426) is 1468
+PASS baz(object, 714, 1428) is 1470
+PASS baz(object, 715, 1430) is 1472
+PASS baz(object, 716, 1432) is 1474
+PASS baz(object, 717, 1434) is 1476
+PASS baz(object, 718, 1436) is 1478
+PASS baz(object, 719, 1438) is 1480
+PASS baz(object, 720, 1440) is 1482
+PASS baz(object, 721, 1442) is 1484
+PASS baz(object, 722, 1444) is 1486
+PASS baz(object, 723, 1446) is 1488
+PASS baz(object, 724, 1448) is 1490
+PASS baz(object, 725, 1450) is 1492
+PASS baz(object, 726, 1452) is 1494
+PASS baz(object, 727, 1454) is 1496
+PASS baz(object, 728, 1456) is 1498
+PASS baz(object, 729, 1458) is 1500
+PASS baz(object, 730, 1460) is 1502
+PASS baz(object, 731, 1462) is 1504
+PASS baz(object, 732, 1464) is 1506
+PASS baz(object, 733, 1466) is 1508
+PASS baz(object, 734, 1468) is 1510
+PASS baz(object, 735, 1470) is 1512
+PASS baz(object, 736, 1472) is 1514
+PASS baz(object, 737, 1474) is 1516
+PASS baz(object, 738, 1476) is 1518
+PASS baz(object, 739, 1478) is 1520
+PASS baz(object, 740, 1480) is 1522
+PASS baz(object, 741, 1482) is 1524
+PASS baz(object, 742, 1484) is 1526
+PASS baz(object, 743, 1486) is 1528
+PASS baz(object, 744, 1488) is 1530
+PASS baz(object, 745, 1490) is 1532
+PASS baz(object, 746, 1492) is 1534
+PASS baz(object, 747, 1494) is 1536
+PASS baz(object, 748, 1496) is 1538
+PASS baz(object, 749, 1498) is 1540
+PASS baz(object, 750, 1500) is 1542
+PASS baz(object, 751, 1502) is 1544
+PASS baz(object, 752, 1504) is 1546
+PASS baz(object, 753, 1506) is 1548
+PASS baz(object, 754, 1508) is 1550
+PASS baz(object, 755, 1510) is 1552
+PASS baz(object, 756, 1512) is 1554
+PASS baz(object, 757, 1514) is 1556
+PASS baz(object, 758, 1516) is 1558
+PASS baz(object, 759, 1518) is 1560
+PASS baz(object, 760, 1520) is 1562
+PASS baz(object, 761, 1522) is 1564
+PASS baz(object, 762, 1524) is 1566
+PASS baz(object, 763, 1526) is 1568
+PASS baz(object, 764, 1528) is 1570
+PASS baz(object, 765, 1530) is 1572
+PASS baz(object, 766, 1532) is 1574
+PASS baz(object, 767, 1534) is 1576
+PASS baz(object, 768, 1536) is 1578
+PASS baz(object, 769, 1538) is 1580
+PASS baz(object, 770, 1540) is 1582
+PASS baz(object, 771, 1542) is 1584
+PASS baz(object, 772, 1544) is 1586
+PASS baz(object, 773, 1546) is 1588
+PASS baz(object, 774, 1548) is 1590
+PASS baz(object, 775, 1550) is 1592
+PASS baz(object, 776, 1552) is 1594
+PASS baz(object, 777, 1554) is 1596
+PASS baz(object, 778, 1556) is 1598
+PASS baz(object, 779, 1558) is 1600
+PASS baz(object, 780, 1560) is 1602
+PASS baz(object, 781, 1562) is 1604
+PASS baz(object, 782, 1564) is 1606
+PASS baz(object, 783, 1566) is 1608
+PASS baz(object, 784, 1568) is 1610
+PASS baz(object, 785, 1570) is 1612
+PASS baz(object, 786, 1572) is 1614
+PASS baz(object, 787, 1574) is 1616
+PASS baz(object, 788, 1576) is 1618
+PASS baz(object, 789, 1578) is 1620
+PASS baz(object, 790, 1580) is 1622
+PASS baz(object, 791, 1582) is 1624
+PASS baz(object, 792, 1584) is 1626
+PASS baz(object, 793, 1586) is 1628
+PASS baz(object, 794, 1588) is 1630
+PASS baz(object, 795, 1590) is 1632
+PASS baz(object, 796, 1592) is 1634
+PASS baz(object, 797, 1594) is 1636
+PASS baz(object, 798, 1596) is 1638
+PASS baz(object, 799, 1598) is 1640
+PASS baz(object, 800, 1600) is 1642
+PASS baz(object, 801, 1602) is 1644
+PASS baz(object, 802, 1604) is 1646
+PASS baz(object, 803, 1606) is 1648
+PASS baz(object, 804, 1608) is 1650
+PASS baz(object, 805, 1610) is 1652
+PASS baz(object, 806, 1612) is 1654
+PASS baz(object, 807, 1614) is 1656
+PASS baz(object, 808, 1616) is 1658
+PASS baz(object, 809, 1618) is 1660
+PASS baz(object, 810, 1620) is 1662
+PASS baz(object, 811, 1622) is 1664
+PASS baz(object, 812, 1624) is 1666
+PASS baz(object, 813, 1626) is 1668
+PASS baz(object, 814, 1628) is 1670
+PASS baz(object, 815, 1630) is 1672
+PASS baz(object, 816, 1632) is 1674
+PASS baz(object, 817, 1634) is 1676
+PASS baz(object, 818, 1636) is 1678
+PASS baz(object, 819, 1638) is 1680
+PASS baz(object, 820, 1640) is 1682
+PASS baz(object, 821, 1642) is 1684
+PASS baz(object, 822, 1644) is 1686
+PASS baz(object, 823, 1646) is 1688
+PASS baz(object, 824, 1648) is 1690
+PASS baz(object, 825, 1650) is 1692
+PASS baz(object, 826, 1652) is 1694
+PASS baz(object, 827, 1654) is 1696
+PASS baz(object, 828, 1656) is 1698
+PASS baz(object, 829, 1658) is 1700
+PASS baz(object, 830, 1660) is 1702
+PASS baz(object, 831, 1662) is 1704
+PASS baz(object, 832, 1664) is 1706
+PASS baz(object, 833, 1666) is 1708
+PASS baz(object, 834, 1668) is 1710
+PASS baz(object, 835, 1670) is 1712
+PASS baz(object, 836, 1672) is 1714
+PASS baz(object, 837, 1674) is 1716
+PASS baz(object, 838, 1676) is 1718
+PASS baz(object, 839, 1678) is 1720
+PASS baz(object, 840, 1680) is 1722
+PASS baz(object, 841, 1682) is 1724
+PASS baz(object, 842, 1684) is 1726
+PASS baz(object, 843, 1686) is 1728
+PASS baz(object, 844, 1688) is 1730
+PASS baz(object, 845, 1690) is 1732
+PASS baz(object, 846, 1692) is 1734
+PASS baz(object, 847, 1694) is 1736
+PASS baz(object, 848, 1696) is 1738
+PASS baz(object, 849, 1698) is 1740
+PASS baz(object, 850, 1700) is 1742
+PASS baz(object, 851, 1702) is 1744
+PASS baz(object, 852, 1704) is 1746
+PASS baz(object, 853, 1706) is 1748
+PASS baz(object, 854, 1708) is 1750
+PASS baz(object, 855, 1710) is 1752
+PASS baz(object, 856, 1712) is 1754
+PASS baz(object, 857, 1714) is 1756
+PASS baz(object, 858, 1716) is 1758
+PASS baz(object, 859, 1718) is 1760
+PASS baz(object, 860, 1720) is 1762
+PASS baz(object, 861, 1722) is 1764
+PASS baz(object, 862, 1724) is 1766
+PASS baz(object, 863, 1726) is 1768
+PASS baz(object, 864, 1728) is 1770
+PASS baz(object, 865, 1730) is 1772
+PASS baz(object, 866, 1732) is 1774
+PASS baz(object, 867, 1734) is 1776
+PASS baz(object, 868, 1736) is 1778
+PASS baz(object, 869, 1738) is 1780
+PASS baz(object, 870, 1740) is 1782
+PASS baz(object, 871, 1742) is 1784
+PASS baz(object, 872, 1744) is 1786
+PASS baz(object, 873, 1746) is 1788
+PASS baz(object, 874, 1748) is 1790
+PASS baz(object, 875, 1750) is 1792
+PASS baz(object, 876, 1752) is 1794
+PASS baz(object, 877, 1754) is 1796
+PASS baz(object, 878, 1756) is 1798
+PASS baz(object, 879, 1758) is 1800
+PASS baz(object, 880, 1760) is 1802
+PASS baz(object, 881, 1762) is 1804
+PASS baz(object, 882, 1764) is 1806
+PASS baz(object, 883, 1766) is 1808
+PASS baz(object, 884, 1768) is 1810
+PASS baz(object, 885, 1770) is 1812
+PASS baz(object, 886, 1772) is 1814
+PASS baz(object, 887, 1774) is 1816
+PASS baz(object, 888, 1776) is 1818
+PASS baz(object, 889, 1778) is 1820
+PASS baz(object, 890, 1780) is 1822
+PASS baz(object, 891, 1782) is 1824
+PASS baz(object, 892, 1784) is 1826
+PASS baz(object, 893, 1786) is 1828
+PASS baz(object, 894, 1788) is 1830
+PASS baz(object, 895, 1790) is 1832
+PASS baz(object, 896, 1792) is 1834
+PASS baz(object, 897, 1794) is 1836
+PASS baz(object, 898, 1796) is 1838
+PASS baz(object, 899, 1798) is 1840
+PASS baz(object, 900, 1800) is 1842
+PASS baz(object, 901, 1802) is 1844
+PASS baz(object, 902, 1804) is 1846
+PASS baz(object, 903, 1806) is 1848
+PASS baz(object, 904, 1808) is 1850
+PASS baz(object, 905, 1810) is 1852
+PASS baz(object, 906, 1812) is 1854
+PASS baz(object, 907, 1814) is 1856
+PASS baz(object, 908, 1816) is 1858
+PASS baz(object, 909, 1818) is 1860
+PASS baz(object, 910, 1820) is 1862
+PASS baz(object, 911, 1822) is 1864
+PASS baz(object, 912, 1824) is 1866
+PASS baz(object, 913, 1826) is 1868
+PASS baz(object, 914, 1828) is 1870
+PASS baz(object, 915, 1830) is 1872
+PASS baz(object, 916, 1832) is 1874
+PASS baz(object, 917, 1834) is 1876
+PASS baz(object, 918, 1836) is 1878
+PASS baz(object, 919, 1838) is 1880
+PASS baz(object, 920, 1840) is 1882
+PASS baz(object, 921, 1842) is 1884
+PASS baz(object, 922, 1844) is 1886
+PASS baz(object, 923, 1846) is 1888
+PASS baz(object, 924, 1848) is 1890
+PASS baz(object, 925, 1850) is 1892
+PASS baz(object, 926, 1852) is 1894
+PASS baz(object, 927, 1854) is 1896
+PASS baz(object, 928, 1856) is 1898
+PASS baz(object, 929, 1858) is 1900
+PASS baz(object, 930, 1860) is 1902
+PASS baz(object, 931, 1862) is 1904
+PASS baz(object, 932, 1864) is 1906
+PASS baz(object, 933, 1866) is 1908
+PASS baz(object, 934, 1868) is 1910
+PASS baz(object, 935, 1870) is 1912
+PASS baz(object, 936, 1872) is 1914
+PASS baz(object, 937, 1874) is 1916
+PASS baz(object, 938, 1876) is 1918
+PASS baz(object, 939, 1878) is 1920
+PASS baz(object, 940, 1880) is 1922
+PASS baz(object, 941, 1882) is 1924
+PASS baz(object, 942, 1884) is 1926
+PASS baz(object, 943, 1886) is 1928
+PASS baz(object, 944, 1888) is 1930
+PASS baz(object, 945, 1890) is 1932
+PASS baz(object, 946, 1892) is 1934
+PASS baz(object, 947, 1894) is 1936
+PASS baz(object, 948, 1896) is 1938
+PASS baz(object, 949, 1898) is 1940
+PASS baz(object, 950, 1900) is 1942
+PASS baz(object, 951, 1902) is 1944
+PASS baz(object, 952, 1904) is 1946
+PASS baz(object, 953, 1906) is 1948
+PASS baz(object, 954, 1908) is 1950
+PASS baz(object, 955, 1910) is 1952
+PASS baz(object, 956, 1912) is 1954
+PASS baz(object, 957, 1914) is 1956
+PASS baz(object, 958, 1916) is 1958
+PASS baz(object, 959, 1918) is 1960
+PASS baz(object, 960, 1920) is 1962
+PASS baz(object, 961, 1922) is 1964
+PASS baz(object, 962, 1924) is 1966
+PASS baz(object, 963, 1926) is 1968
+PASS baz(object, 964, 1928) is 1970
+PASS baz(object, 965, 1930) is 1972
+PASS baz(object, 966, 1932) is 1974
+PASS baz(object, 967, 1934) is 1976
+PASS baz(object, 968, 1936) is 1978
+PASS baz(object, 969, 1938) is 1980
+PASS baz(object, 970, 1940) is 1982
+PASS baz(object, 971, 1942) is 1984
+PASS baz(object, 972, 1944) is 1986
+PASS baz(object, 973, 1946) is 1988
+PASS baz(object, 974, 1948) is 1990
+PASS baz(object, 975, 1950) is 1992
+PASS baz(object, 976, 1952) is 1994
+PASS baz(object, 977, 1954) is 1996
+PASS baz(object, 978, 1956) is 1998
+PASS baz(object, 979, 1958) is 2000
+PASS baz(object, 980, 1960) is 2002
+PASS baz(object, 981, 1962) is 2004
+PASS baz(object, 982, 1964) is 2006
+PASS baz(object, 983, 1966) is 2008
+PASS baz(object, 984, 1968) is 2010
+PASS baz(object, 985, 1970) is 2012
+PASS baz(object, 986, 1972) is 2014
+PASS baz(object, 987, 1974) is 2016
+PASS baz(object, 988, 1976) is 2018
+PASS baz(object, 989, 1978) is 2020
+PASS baz(object, 990, 1980) is 2022
+PASS baz(object, 991, 1982) is 2024
+PASS baz(object, 992, 1984) is 2026
+PASS baz(object, 993, 1986) is 2028
+PASS baz(object, 994, 1988) is 2030
+PASS baz(object, 995, 1990) is 2032
+PASS baz(object, 996, 1992) is 2034
+PASS baz(object, 997, 1994) is 2036
+PASS baz(object, 998, 1996) is 2038
+PASS baz(object, 999, 1998) is 2040
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-intrinsic-unused-this-method-check-expected.txt b/test/webkit/dfg-intrinsic-unused-this-method-check-expected.txt
new file mode 100644 (file)
index 0000000..dc62c0b
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that doing intrinsic function optimization does not result in this being lost entirely, if method check optimizations succeed.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS baz(object, 0, 0) is 0
+PASS baz(object, 1, 2) is 2
+PASS baz(object, 2, 4) is 4
+PASS baz(object, 3, 6) is 6
+PASS baz(object, 4, 8) is 8
+PASS baz(object, 5, 10) is 10
+PASS baz(object, 6, 12) is 12
+PASS baz(object, 7, 14) is 14
+PASS baz(object, 8, 16) is 16
+PASS baz(object, 9, 18) is 18
+PASS baz(object, 10, 20) is 20
+PASS baz(object, 11, 22) is 22
+PASS baz(object, 12, 24) is 24
+PASS baz(object, 13, 26) is 26
+PASS baz(object, 14, 28) is 28
+PASS baz(object, 15, 30) is 30
+PASS baz(object, 16, 32) is 32
+PASS baz(object, 17, 34) is 34
+PASS baz(object, 18, 36) is 36
+PASS baz(object, 19, 38) is 38
+PASS baz(object, 20, 40) is 40
+PASS baz(object, 21, 42) is 42
+PASS baz(object, 22, 44) is 44
+PASS baz(object, 23, 46) is 46
+PASS baz(object, 24, 48) is 48
+PASS baz(object, 25, 50) is 50
+PASS baz(object, 26, 52) is 52
+PASS baz(object, 27, 54) is 54
+PASS baz(object, 28, 56) is 56
+PASS baz(object, 29, 58) is 58
+PASS baz(object, 30, 60) is 60
+PASS baz(object, 31, 62) is 62
+PASS baz(object, 32, 64) is 64
+PASS baz(object, 33, 66) is 66
+PASS baz(object, 34, 68) is 68
+PASS baz(object, 35, 70) is 70
+PASS baz(object, 36, 72) is 72
+PASS baz(object, 37, 74) is 74
+PASS baz(object, 38, 76) is 76
+PASS baz(object, 39, 78) is 78
+PASS baz(object, 40, 80) is 80
+PASS baz(object, 41, 82) is 82
+PASS baz(object, 42, 84) is 84
+PASS baz(object, 43, 86) is 86
+PASS baz(object, 44, 88) is 88
+PASS baz(object, 45, 90) is 90
+PASS baz(object, 46, 92) is 92
+PASS baz(object, 47, 94) is 94
+PASS baz(object, 48, 96) is 96
+PASS baz(object, 49, 98) is 98
+PASS baz(object, 50, 100) is 100
+PASS baz(object, 51, 102) is 102
+PASS baz(object, 52, 104) is 104
+PASS baz(object, 53, 106) is 106
+PASS baz(object, 54, 108) is 108
+PASS baz(object, 55, 110) is 110
+PASS baz(object, 56, 112) is 112
+PASS baz(object, 57, 114) is 114
+PASS baz(object, 58, 116) is 116
+PASS baz(object, 59, 118) is 118
+PASS baz(object, 60, 120) is 120
+PASS baz(object, 61, 122) is 122
+PASS baz(object, 62, 124) is 124
+PASS baz(object, 63, 126) is 126
+PASS baz(object, 64, 128) is 128
+PASS baz(object, 65, 130) is 130
+PASS baz(object, 66, 132) is 132
+PASS baz(object, 67, 134) is 134
+PASS baz(object, 68, 136) is 136
+PASS baz(object, 69, 138) is 138
+PASS baz(object, 70, 140) is 140
+PASS baz(object, 71, 142) is 142
+PASS baz(object, 72, 144) is 144
+PASS baz(object, 73, 146) is 146
+PASS baz(object, 74, 148) is 148
+PASS baz(object, 75, 150) is 150
+PASS baz(object, 76, 152) is 152
+PASS baz(object, 77, 154) is 154
+PASS baz(object, 78, 156) is 156
+PASS baz(object, 79, 158) is 158
+PASS baz(object, 80, 160) is 160
+PASS baz(object, 81, 162) is 162
+PASS baz(object, 82, 164) is 164
+PASS baz(object, 83, 166) is 166
+PASS baz(object, 84, 168) is 168
+PASS baz(object, 85, 170) is 170
+PASS baz(object, 86, 172) is 172
+PASS baz(object, 87, 174) is 174
+PASS baz(object, 88, 176) is 176
+PASS baz(object, 89, 178) is 178
+PASS baz(object, 90, 180) is 180
+PASS baz(object, 91, 182) is 182
+PASS baz(object, 92, 184) is 184
+PASS baz(object, 93, 186) is 186
+PASS baz(object, 94, 188) is 188
+PASS baz(object, 95, 190) is 190
+PASS baz(object, 96, 192) is 192
+PASS baz(object, 97, 194) is 194
+PASS baz(object, 98, 196) is 196
+PASS baz(object, 99, 198) is 198
+PASS baz(object, 100, 200) is 200
+PASS baz(object, 101, 202) is 202
+PASS baz(object, 102, 204) is 204
+PASS baz(object, 103, 206) is 206
+PASS baz(object, 104, 208) is 208
+PASS baz(object, 105, 210) is 210
+PASS baz(object, 106, 212) is 212
+PASS baz(object, 107, 214) is 214
+PASS baz(object, 108, 216) is 216
+PASS baz(object, 109, 218) is 218
+PASS baz(object, 110, 220) is 220
+PASS baz(object, 111, 222) is 222
+PASS baz(object, 112, 224) is 224
+PASS baz(object, 113, 226) is 226
+PASS baz(object, 114, 228) is 228
+PASS baz(object, 115, 230) is 230
+PASS baz(object, 116, 232) is 232
+PASS baz(object, 117, 234) is 234
+PASS baz(object, 118, 236) is 236
+PASS baz(object, 119, 238) is 238
+PASS baz(object, 120, 240) is 240
+PASS baz(object, 121, 242) is 242
+PASS baz(object, 122, 244) is 244
+PASS baz(object, 123, 246) is 246
+PASS baz(object, 124, 248) is 248
+PASS baz(object, 125, 250) is 250
+PASS baz(object, 126, 252) is 252
+PASS baz(object, 127, 254) is 254
+PASS baz(object, 128, 256) is 256
+PASS baz(object, 129, 258) is 258
+PASS baz(object, 130, 260) is 260
+PASS baz(object, 131, 262) is 262
+PASS baz(object, 132, 264) is 264
+PASS baz(object, 133, 266) is 266
+PASS baz(object, 134, 268) is 268
+PASS baz(object, 135, 270) is 270
+PASS baz(object, 136, 272) is 272
+PASS baz(object, 137, 274) is 274
+PASS baz(object, 138, 276) is 276
+PASS baz(object, 139, 278) is 278
+PASS baz(object, 140, 280) is 280
+PASS baz(object, 141, 282) is 282
+PASS baz(object, 142, 284) is 284
+PASS baz(object, 143, 286) is 286
+PASS baz(object, 144, 288) is 288
+PASS baz(object, 145, 290) is 290
+PASS baz(object, 146, 292) is 292
+PASS baz(object, 147, 294) is 294
+PASS baz(object, 148, 296) is 296
+PASS baz(object, 149, 298) is 298
+PASS baz(object, 150, 300) is 300
+PASS baz(object, 151, 302) is 302
+PASS baz(object, 152, 304) is 304
+PASS baz(object, 153, 306) is 306
+PASS baz(object, 154, 308) is 308
+PASS baz(object, 155, 310) is 310
+PASS baz(object, 156, 312) is 312
+PASS baz(object, 157, 314) is 314
+PASS baz(object, 158, 316) is 316
+PASS baz(object, 159, 318) is 318
+PASS baz(object, 160, 320) is 320
+PASS baz(object, 161, 322) is 322
+PASS baz(object, 162, 324) is 324
+PASS baz(object, 163, 326) is 326
+PASS baz(object, 164, 328) is 328
+PASS baz(object, 165, 330) is 330
+PASS baz(object, 166, 332) is 332
+PASS baz(object, 167, 334) is 334
+PASS baz(object, 168, 336) is 336
+PASS baz(object, 169, 338) is 338
+PASS baz(object, 170, 340) is 340
+PASS baz(object, 171, 342) is 342
+PASS baz(object, 172, 344) is 344
+PASS baz(object, 173, 346) is 346
+PASS baz(object, 174, 348) is 348
+PASS baz(object, 175, 350) is 350
+PASS baz(object, 176, 352) is 352
+PASS baz(object, 177, 354) is 354
+PASS baz(object, 178, 356) is 356
+PASS baz(object, 179, 358) is 358
+PASS baz(object, 180, 360) is 360
+PASS baz(object, 181, 362) is 362
+PASS baz(object, 182, 364) is 364
+PASS baz(object, 183, 366) is 366
+PASS baz(object, 184, 368) is 368
+PASS baz(object, 185, 370) is 370
+PASS baz(object, 186, 372) is 372
+PASS baz(object, 187, 374) is 374
+PASS baz(object, 188, 376) is 376
+PASS baz(object, 189, 378) is 378
+PASS baz(object, 190, 380) is 380
+PASS baz(object, 191, 382) is 382
+PASS baz(object, 192, 384) is 384
+PASS baz(object, 193, 386) is 386
+PASS baz(object, 194, 388) is 388
+PASS baz(object, 195, 390) is 390
+PASS baz(object, 196, 392) is 392
+PASS baz(object, 197, 394) is 394
+PASS baz(object, 198, 396) is 396
+PASS baz(object, 199, 398) is 398
+PASS baz(object, 200, 400) is 400
+PASS baz(object, 201, 402) is 402
+PASS baz(object, 202, 404) is 404
+PASS baz(object, 203, 406) is 406
+PASS baz(object, 204, 408) is 408
+PASS baz(object, 205, 410) is 410
+PASS baz(object, 206, 412) is 412
+PASS baz(object, 207, 414) is 414
+PASS baz(object, 208, 416) is 416
+PASS baz(object, 209, 418) is 418
+PASS baz(object, 210, 420) is 420
+PASS baz(object, 211, 422) is 422
+PASS baz(object, 212, 424) is 424
+PASS baz(object, 213, 426) is 426
+PASS baz(object, 214, 428) is 428
+PASS baz(object, 215, 430) is 430
+PASS baz(object, 216, 432) is 432
+PASS baz(object, 217, 434) is 434
+PASS baz(object, 218, 436) is 436
+PASS baz(object, 219, 438) is 438
+PASS baz(object, 220, 440) is 440
+PASS baz(object, 221, 442) is 442
+PASS baz(object, 222, 444) is 444
+PASS baz(object, 223, 446) is 446
+PASS baz(object, 224, 448) is 448
+PASS baz(object, 225, 450) is 450
+PASS baz(object, 226, 452) is 452
+PASS baz(object, 227, 454) is 454
+PASS baz(object, 228, 456) is 456
+PASS baz(object, 229, 458) is 458
+PASS baz(object, 230, 460) is 460
+PASS baz(object, 231, 462) is 462
+PASS baz(object, 232, 464) is 464
+PASS baz(object, 233, 466) is 466
+PASS baz(object, 234, 468) is 468
+PASS baz(object, 235, 470) is 470
+PASS baz(object, 236, 472) is 472
+PASS baz(object, 237, 474) is 474
+PASS baz(object, 238, 476) is 476
+PASS baz(object, 239, 478) is 478
+PASS baz(object, 240, 480) is 480
+PASS baz(object, 241, 482) is 482
+PASS baz(object, 242, 484) is 484
+PASS baz(object, 243, 486) is 486
+PASS baz(object, 244, 488) is 488
+PASS baz(object, 245, 490) is 490
+PASS baz(object, 246, 492) is 492
+PASS baz(object, 247, 494) is 494
+PASS baz(object, 248, 496) is 496
+PASS baz(object, 249, 498) is 498
+PASS baz(object, 250, 500) is 500
+PASS baz(object, 251, 502) is 502
+PASS baz(object, 252, 504) is 504
+PASS baz(object, 253, 506) is 506
+PASS baz(object, 254, 508) is 508
+PASS baz(object, 255, 510) is 510
+PASS baz(object, 256, 512) is 512
+PASS baz(object, 257, 514) is 514
+PASS baz(object, 258, 516) is 516
+PASS baz(object, 259, 518) is 518
+PASS baz(object, 260, 520) is 520
+PASS baz(object, 261, 522) is 522
+PASS baz(object, 262, 524) is 524
+PASS baz(object, 263, 526) is 526
+PASS baz(object, 264, 528) is 528
+PASS baz(object, 265, 530) is 530
+PASS baz(object, 266, 532) is 532
+PASS baz(object, 267, 534) is 534
+PASS baz(object, 268, 536) is 536
+PASS baz(object, 269, 538) is 538
+PASS baz(object, 270, 540) is 540
+PASS baz(object, 271, 542) is 542
+PASS baz(object, 272, 544) is 544
+PASS baz(object, 273, 546) is 546
+PASS baz(object, 274, 548) is 548
+PASS baz(object, 275, 550) is 550
+PASS baz(object, 276, 552) is 552
+PASS baz(object, 277, 554) is 554
+PASS baz(object, 278, 556) is 556
+PASS baz(object, 279, 558) is 558
+PASS baz(object, 280, 560) is 560
+PASS baz(object, 281, 562) is 562
+PASS baz(object, 282, 564) is 564
+PASS baz(object, 283, 566) is 566
+PASS baz(object, 284, 568) is 568
+PASS baz(object, 285, 570) is 570
+PASS baz(object, 286, 572) is 572
+PASS baz(object, 287, 574) is 574
+PASS baz(object, 288, 576) is 576
+PASS baz(object, 289, 578) is 578
+PASS baz(object, 290, 580) is 580
+PASS baz(object, 291, 582) is 582
+PASS baz(object, 292, 584) is 584
+PASS baz(object, 293, 586) is 586
+PASS baz(object, 294, 588) is 588
+PASS baz(object, 295, 590) is 590
+PASS baz(object, 296, 592) is 592
+PASS baz(object, 297, 594) is 594
+PASS baz(object, 298, 596) is 596
+PASS baz(object, 299, 598) is 598
+PASS baz(object, 300, 600) is 600
+PASS baz(object, 301, 602) is 602
+PASS baz(object, 302, 604) is 604
+PASS baz(object, 303, 606) is 606
+PASS baz(object, 304, 608) is 608
+PASS baz(object, 305, 610) is 610
+PASS baz(object, 306, 612) is 612
+PASS baz(object, 307, 614) is 614
+PASS baz(object, 308, 616) is 616
+PASS baz(object, 309, 618) is 618
+PASS baz(object, 310, 620) is 620
+PASS baz(object, 311, 622) is 622
+PASS baz(object, 312, 624) is 624
+PASS baz(object, 313, 626) is 626
+PASS baz(object, 314, 628) is 628
+PASS baz(object, 315, 630) is 630
+PASS baz(object, 316, 632) is 632
+PASS baz(object, 317, 634) is 634
+PASS baz(object, 318, 636) is 636
+PASS baz(object, 319, 638) is 638
+PASS baz(object, 320, 640) is 640
+PASS baz(object, 321, 642) is 642
+PASS baz(object, 322, 644) is 644
+PASS baz(object, 323, 646) is 646
+PASS baz(object, 324, 648) is 648
+PASS baz(object, 325, 650) is 650
+PASS baz(object, 326, 652) is 652
+PASS baz(object, 327, 654) is 654
+PASS baz(object, 328, 656) is 656
+PASS baz(object, 329, 658) is 658
+PASS baz(object, 330, 660) is 660
+PASS baz(object, 331, 662) is 662
+PASS baz(object, 332, 664) is 664
+PASS baz(object, 333, 666) is 666
+PASS baz(object, 334, 668) is 668
+PASS baz(object, 335, 670) is 670
+PASS baz(object, 336, 672) is 672
+PASS baz(object, 337, 674) is 674
+PASS baz(object, 338, 676) is 676
+PASS baz(object, 339, 678) is 678
+PASS baz(object, 340, 680) is 680
+PASS baz(object, 341, 682) is 682
+PASS baz(object, 342, 684) is 684
+PASS baz(object, 343, 686) is 686
+PASS baz(object, 344, 688) is 688
+PASS baz(object, 345, 690) is 690
+PASS baz(object, 346, 692) is 692
+PASS baz(object, 347, 694) is 694
+PASS baz(object, 348, 696) is 696
+PASS baz(object, 349, 698) is 698
+PASS baz(object, 350, 700) is 700
+PASS baz(object, 351, 702) is 702
+PASS baz(object, 352, 704) is 704
+PASS baz(object, 353, 706) is 706
+PASS baz(object, 354, 708) is 708
+PASS baz(object, 355, 710) is 710
+PASS baz(object, 356, 712) is 712
+PASS baz(object, 357, 714) is 714
+PASS baz(object, 358, 716) is 716
+PASS baz(object, 359, 718) is 718
+PASS baz(object, 360, 720) is 720
+PASS baz(object, 361, 722) is 722
+PASS baz(object, 362, 724) is 724
+PASS baz(object, 363, 726) is 726
+PASS baz(object, 364, 728) is 728
+PASS baz(object, 365, 730) is 730
+PASS baz(object, 366, 732) is 732
+PASS baz(object, 367, 734) is 734
+PASS baz(object, 368, 736) is 736
+PASS baz(object, 369, 738) is 738
+PASS baz(object, 370, 740) is 740
+PASS baz(object, 371, 742) is 742
+PASS baz(object, 372, 744) is 744
+PASS baz(object, 373, 746) is 746
+PASS baz(object, 374, 748) is 748
+PASS baz(object, 375, 750) is 750
+PASS baz(object, 376, 752) is 752
+PASS baz(object, 377, 754) is 754
+PASS baz(object, 378, 756) is 756
+PASS baz(object, 379, 758) is 758
+PASS baz(object, 380, 760) is 760
+PASS baz(object, 381, 762) is 762
+PASS baz(object, 382, 764) is 764
+PASS baz(object, 383, 766) is 766
+PASS baz(object, 384, 768) is 768
+PASS baz(object, 385, 770) is 770
+PASS baz(object, 386, 772) is 772
+PASS baz(object, 387, 774) is 774
+PASS baz(object, 388, 776) is 776
+PASS baz(object, 389, 778) is 778
+PASS baz(object, 390, 780) is 780
+PASS baz(object, 391, 782) is 782
+PASS baz(object, 392, 784) is 784
+PASS baz(object, 393, 786) is 786
+PASS baz(object, 394, 788) is 788
+PASS baz(object, 395, 790) is 790
+PASS baz(object, 396, 792) is 792
+PASS baz(object, 397, 794) is 794
+PASS baz(object, 398, 796) is 796
+PASS baz(object, 399, 798) is 798
+PASS baz(object, 400, 800) is 800
+PASS baz(object, 401, 802) is 802
+PASS baz(object, 402, 804) is 804
+PASS baz(object, 403, 806) is 806
+PASS baz(object, 404, 808) is 808
+PASS baz(object, 405, 810) is 810
+PASS baz(object, 406, 812) is 812
+PASS baz(object, 407, 814) is 814
+PASS baz(object, 408, 816) is 816
+PASS baz(object, 409, 818) is 818
+PASS baz(object, 410, 820) is 820
+PASS baz(object, 411, 822) is 822
+PASS baz(object, 412, 824) is 824
+PASS baz(object, 413, 826) is 826
+PASS baz(object, 414, 828) is 828
+PASS baz(object, 415, 830) is 830
+PASS baz(object, 416, 832) is 832
+PASS baz(object, 417, 834) is 834
+PASS baz(object, 418, 836) is 836
+PASS baz(object, 419, 838) is 838
+PASS baz(object, 420, 840) is 840
+PASS baz(object, 421, 842) is 842
+PASS baz(object, 422, 844) is 844
+PASS baz(object, 423, 846) is 846
+PASS baz(object, 424, 848) is 848
+PASS baz(object, 425, 850) is 850
+PASS baz(object, 426, 852) is 852
+PASS baz(object, 427, 854) is 854
+PASS baz(object, 428, 856) is 856
+PASS baz(object, 429, 858) is 858
+PASS baz(object, 430, 860) is 860
+PASS baz(object, 431, 862) is 862
+PASS baz(object, 432, 864) is 864
+PASS baz(object, 433, 866) is 866
+PASS baz(object, 434, 868) is 868
+PASS baz(object, 435, 870) is 870
+PASS baz(object, 436, 872) is 872
+PASS baz(object, 437, 874) is 874
+PASS baz(object, 438, 876) is 876
+PASS baz(object, 439, 878) is 878
+PASS baz(object, 440, 880) is 880
+PASS baz(object, 441, 882) is 882
+PASS baz(object, 442, 884) is 884
+PASS baz(object, 443, 886) is 886
+PASS baz(object, 444, 888) is 888
+PASS baz(object, 445, 890) is 890
+PASS baz(object, 446, 892) is 892
+PASS baz(object, 447, 894) is 894
+PASS baz(object, 448, 896) is 896
+PASS baz(object, 449, 898) is 898
+PASS baz(object, 450, 900) is 900
+PASS baz(object, 451, 902) is 902
+PASS baz(object, 452, 904) is 904
+PASS baz(object, 453, 906) is 906
+PASS baz(object, 454, 908) is 908
+PASS baz(object, 455, 910) is 910
+PASS baz(object, 456, 912) is 912
+PASS baz(object, 457, 914) is 914
+PASS baz(object, 458, 916) is 916
+PASS baz(object, 459, 918) is 918
+PASS baz(object, 460, 920) is 920
+PASS baz(object, 461, 922) is 922
+PASS baz(object, 462, 924) is 924
+PASS baz(object, 463, 926) is 926
+PASS baz(object, 464, 928) is 928
+PASS baz(object, 465, 930) is 930
+PASS baz(object, 466, 932) is 932
+PASS baz(object, 467, 934) is 934
+PASS baz(object, 468, 936) is 936
+PASS baz(object, 469, 938) is 938
+PASS baz(object, 470, 940) is 940
+PASS baz(object, 471, 942) is 942
+PASS baz(object, 472, 944) is 944
+PASS baz(object, 473, 946) is 946
+PASS baz(object, 474, 948) is 948
+PASS baz(object, 475, 950) is 950
+PASS baz(object, 476, 952) is 952
+PASS baz(object, 477, 954) is 954
+PASS baz(object, 478, 956) is 956
+PASS baz(object, 479, 958) is 958
+PASS baz(object, 480, 960) is 960
+PASS baz(object, 481, 962) is 962
+PASS baz(object, 482, 964) is 964
+PASS baz(object, 483, 966) is 966
+PASS baz(object, 484, 968) is 968
+PASS baz(object, 485, 970) is 970
+PASS baz(object, 486, 972) is 972
+PASS baz(object, 487, 974) is 974
+PASS baz(object, 488, 976) is 976
+PASS baz(object, 489, 978) is 978
+PASS baz(object, 490, 980) is 980
+PASS baz(object, 491, 982) is 982
+PASS baz(object, 492, 984) is 984
+PASS baz(object, 493, 986) is 986
+PASS baz(object, 494, 988) is 988
+PASS baz(object, 495, 990) is 990
+PASS baz(object, 496, 992) is 992
+PASS baz(object, 497, 994) is 994
+PASS baz(object, 498, 996) is 996
+PASS baz(object, 499, 998) is 998
+PASS baz(object, 500, 1000) is 1000
+PASS baz(object, 501, 1002) is 1002
+PASS baz(object, 502, 1004) is 1004
+PASS baz(object, 503, 1006) is 1006
+PASS baz(object, 504, 1008) is 1008
+PASS baz(object, 505, 1010) is 1010
+PASS baz(object, 506, 1012) is 1012
+PASS baz(object, 507, 1014) is 1014
+PASS baz(object, 508, 1016) is 1016
+PASS baz(object, 509, 1018) is 1018
+PASS baz(object, 510, 1020) is 1020
+PASS baz(object, 511, 1022) is 1022
+PASS baz(object, 512, 1024) is 1024
+PASS baz(object, 513, 1026) is 1026
+PASS baz(object, 514, 1028) is 1028
+PASS baz(object, 515, 1030) is 1030
+PASS baz(object, 516, 1032) is 1032
+PASS baz(object, 517, 1034) is 1034
+PASS baz(object, 518, 1036) is 1036
+PASS baz(object, 519, 1038) is 1038
+PASS baz(object, 520, 1040) is 1040
+PASS baz(object, 521, 1042) is 1042
+PASS baz(object, 522, 1044) is 1044
+PASS baz(object, 523, 1046) is 1046
+PASS baz(object, 524, 1048) is 1048
+PASS baz(object, 525, 1050) is 1050
+PASS baz(object, 526, 1052) is 1052
+PASS baz(object, 527, 1054) is 1054
+PASS baz(object, 528, 1056) is 1056
+PASS baz(object, 529, 1058) is 1058
+PASS baz(object, 530, 1060) is 1060
+PASS baz(object, 531, 1062) is 1062
+PASS baz(object, 532, 1064) is 1064
+PASS baz(object, 533, 1066) is 1066
+PASS baz(object, 534, 1068) is 1068
+PASS baz(object, 535, 1070) is 1070
+PASS baz(object, 536, 1072) is 1072
+PASS baz(object, 537, 1074) is 1074
+PASS baz(object, 538, 1076) is 1076
+PASS baz(object, 539, 1078) is 1078
+PASS baz(object, 540, 1080) is 1080
+PASS baz(object, 541, 1082) is 1082
+PASS baz(object, 542, 1084) is 1084
+PASS baz(object, 543, 1086) is 1086
+PASS baz(object, 544, 1088) is 1088
+PASS baz(object, 545, 1090) is 1090
+PASS baz(object, 546, 1092) is 1092
+PASS baz(object, 547, 1094) is 1094
+PASS baz(object, 548, 1096) is 1096
+PASS baz(object, 549, 1098) is 1098
+PASS baz(object, 550, 1100) is 1100
+PASS baz(object, 551, 1102) is 1102
+PASS baz(object, 552, 1104) is 1104
+PASS baz(object, 553, 1106) is 1106
+PASS baz(object, 554, 1108) is 1108
+PASS baz(object, 555, 1110) is 1110
+PASS baz(object, 556, 1112) is 1112
+PASS baz(object, 557, 1114) is 1114
+PASS baz(object, 558, 1116) is 1116
+PASS baz(object, 559, 1118) is 1118
+PASS baz(object, 560, 1120) is 1120
+PASS baz(object, 561, 1122) is 1122
+PASS baz(object, 562, 1124) is 1124
+PASS baz(object, 563, 1126) is 1126
+PASS baz(object, 564, 1128) is 1128
+PASS baz(object, 565, 1130) is 1130
+PASS baz(object, 566, 1132) is 1132
+PASS baz(object, 567, 1134) is 1134
+PASS baz(object, 568, 1136) is 1136
+PASS baz(object, 569, 1138) is 1138
+PASS baz(object, 570, 1140) is 1140
+PASS baz(object, 571, 1142) is 1142
+PASS baz(object, 572, 1144) is 1144
+PASS baz(object, 573, 1146) is 1146
+PASS baz(object, 574, 1148) is 1148
+PASS baz(object, 575, 1150) is 1150
+PASS baz(object, 576, 1152) is 1152
+PASS baz(object, 577, 1154) is 1154
+PASS baz(object, 578, 1156) is 1156
+PASS baz(object, 579, 1158) is 1158
+PASS baz(object, 580, 1160) is 1160
+PASS baz(object, 581, 1162) is 1162
+PASS baz(object, 582, 1164) is 1164
+PASS baz(object, 583, 1166) is 1166
+PASS baz(object, 584, 1168) is 1168
+PASS baz(object, 585, 1170) is 1170
+PASS baz(object, 586, 1172) is 1172
+PASS baz(object, 587, 1174) is 1174
+PASS baz(object, 588, 1176) is 1176
+PASS baz(object, 589, 1178) is 1178
+PASS baz(object, 590, 1180) is 1180
+PASS baz(object, 591, 1182) is 1182
+PASS baz(object, 592, 1184) is 1184
+PASS baz(object, 593, 1186) is 1186
+PASS baz(object, 594, 1188) is 1188
+PASS baz(object, 595, 1190) is 1190
+PASS baz(object, 596, 1192) is 1192
+PASS baz(object, 597, 1194) is 1194
+PASS baz(object, 598, 1196) is 1196
+PASS baz(object, 599, 1198) is 1198
+PASS baz(object, 600, 1200) is 1242
+PASS baz(object, 601, 1202) is 1244
+PASS baz(object, 602, 1204) is 1246
+PASS baz(object, 603, 1206) is 1248
+PASS baz(object, 604, 1208) is 1250
+PASS baz(object, 605, 1210) is 1252
+PASS baz(object, 606, 1212) is 1254
+PASS baz(object, 607, 1214) is 1256
+PASS baz(object, 608, 1216) is 1258
+PASS baz(object, 609, 1218) is 1260
+PASS baz(object, 610, 1220) is 1262
+PASS baz(object, 611, 1222) is 1264
+PASS baz(object, 612, 1224) is 1266
+PASS baz(object, 613, 1226) is 1268
+PASS baz(object, 614, 1228) is 1270
+PASS baz(object, 615, 1230) is 1272
+PASS baz(object, 616, 1232) is 1274
+PASS baz(object, 617, 1234) is 1276
+PASS baz(object, 618, 1236) is 1278
+PASS baz(object, 619, 1238) is 1280
+PASS baz(object, 620, 1240) is 1282
+PASS baz(object, 621, 1242) is 1284
+PASS baz(object, 622, 1244) is 1286
+PASS baz(object, 623, 1246) is 1288
+PASS baz(object, 624, 1248) is 1290
+PASS baz(object, 625, 1250) is 1292
+PASS baz(object, 626, 1252) is 1294
+PASS baz(object, 627, 1254) is 1296
+PASS baz(object, 628, 1256) is 1298
+PASS baz(object, 629, 1258) is 1300
+PASS baz(object, 630, 1260) is 1302
+PASS baz(object, 631, 1262) is 1304
+PASS baz(object, 632, 1264) is 1306
+PASS baz(object, 633, 1266) is 1308
+PASS baz(object, 634, 1268) is 1310
+PASS baz(object, 635, 1270) is 1312
+PASS baz(object, 636, 1272) is 1314
+PASS baz(object, 637, 1274) is 1316
+PASS baz(object, 638, 1276) is 1318
+PASS baz(object, 639, 1278) is 1320
+PASS baz(object, 640, 1280) is 1322
+PASS baz(object, 641, 1282) is 1324
+PASS baz(object, 642, 1284) is 1326
+PASS baz(object, 643, 1286) is 1328
+PASS baz(object, 644, 1288) is 1330
+PASS baz(object, 645, 1290) is 1332
+PASS baz(object, 646, 1292) is 1334
+PASS baz(object, 647, 1294) is 1336
+PASS baz(object, 648, 1296) is 1338
+PASS baz(object, 649, 1298) is 1340
+PASS baz(object, 650, 1300) is 1342
+PASS baz(object, 651, 1302) is 1344
+PASS baz(object, 652, 1304) is 1346
+PASS baz(object, 653, 1306) is 1348
+PASS baz(object, 654, 1308) is 1350
+PASS baz(object, 655, 1310) is 1352
+PASS baz(object, 656, 1312) is 1354
+PASS baz(object, 657, 1314) is 1356
+PASS baz(object, 658, 1316) is 1358
+PASS baz(object, 659, 1318) is 1360
+PASS baz(object, 660, 1320) is 1362
+PASS baz(object, 661, 1322) is 1364
+PASS baz(object, 662, 1324) is 1366
+PASS baz(object, 663, 1326) is 1368
+PASS baz(object, 664, 1328) is 1370
+PASS baz(object, 665, 1330) is 1372
+PASS baz(object, 666, 1332) is 1374
+PASS baz(object, 667, 1334) is 1376
+PASS baz(object, 668, 1336) is 1378
+PASS baz(object, 669, 1338) is 1380
+PASS baz(object, 670, 1340) is 1382
+PASS baz(object, 671, 1342) is 1384
+PASS baz(object, 672, 1344) is 1386
+PASS baz(object, 673, 1346) is 1388
+PASS baz(object, 674, 1348) is 1390
+PASS baz(object, 675, 1350) is 1392
+PASS baz(object, 676, 1352) is 1394
+PASS baz(object, 677, 1354) is 1396
+PASS baz(object, 678, 1356) is 1398
+PASS baz(object, 679, 1358) is 1400
+PASS baz(object, 680, 1360) is 1402
+PASS baz(object, 681, 1362) is 1404
+PASS baz(object, 682, 1364) is 1406
+PASS baz(object, 683, 1366) is 1408
+PASS baz(object, 684, 1368) is 1410
+PASS baz(object, 685, 1370) is 1412
+PASS baz(object, 686, 1372) is 1414
+PASS baz(object, 687, 1374) is 1416
+PASS baz(object, 688, 1376) is 1418
+PASS baz(object, 689, 1378) is 1420
+PASS baz(object, 690, 1380) is 1422
+PASS baz(object, 691, 1382) is 1424
+PASS baz(object, 692, 1384) is 1426
+PASS baz(object, 693, 1386) is 1428
+PASS baz(object, 694, 1388) is 1430
+PASS baz(object, 695, 1390) is 1432
+PASS baz(object, 696, 1392) is 1434
+PASS baz(object, 697, 1394) is 1436
+PASS baz(object, 698, 1396) is 1438
+PASS baz(object, 699, 1398) is 1440
+PASS baz(object, 700, 1400) is 1442
+PASS baz(object, 701, 1402) is 1444
+PASS baz(object, 702, 1404) is 1446
+PASS baz(object, 703, 1406) is 1448
+PASS baz(object, 704, 1408) is 1450
+PASS baz(object, 705, 1410) is 1452
+PASS baz(object, 706, 1412) is 1454
+PASS baz(object, 707, 1414) is 1456
+PASS baz(object, 708, 1416) is 1458
+PASS baz(object, 709, 1418) is 1460
+PASS baz(object, 710, 1420) is 1462
+PASS baz(object, 711, 1422) is 1464
+PASS baz(object, 712, 1424) is 1466
+PASS baz(object, 713, 1426) is 1468
+PASS baz(object, 714, 1428) is 1470
+PASS baz(object, 715, 1430) is 1472
+PASS baz(object, 716, 1432) is 1474
+PASS baz(object, 717, 1434) is 1476
+PASS baz(object, 718, 1436) is 1478
+PASS baz(object, 719, 1438) is 1480
+PASS baz(object, 720, 1440) is 1482
+PASS baz(object, 721, 1442) is 1484
+PASS baz(object, 722, 1444) is 1486
+PASS baz(object, 723, 1446) is 1488
+PASS baz(object, 724, 1448) is 1490
+PASS baz(object, 725, 1450) is 1492
+PASS baz(object, 726, 1452) is 1494
+PASS baz(object, 727, 1454) is 1496
+PASS baz(object, 728, 1456) is 1498
+PASS baz(object, 729, 1458) is 1500
+PASS baz(object, 730, 1460) is 1502
+PASS baz(object, 731, 1462) is 1504
+PASS baz(object, 732, 1464) is 1506
+PASS baz(object, 733, 1466) is 1508
+PASS baz(object, 734, 1468) is 1510
+PASS baz(object, 735, 1470) is 1512
+PASS baz(object, 736, 1472) is 1514
+PASS baz(object, 737, 1474) is 1516
+PASS baz(object, 738, 1476) is 1518
+PASS baz(object, 739, 1478) is 1520
+PASS baz(object, 740, 1480) is 1522
+PASS baz(object, 741, 1482) is 1524
+PASS baz(object, 742, 1484) is 1526
+PASS baz(object, 743, 1486) is 1528
+PASS baz(object, 744, 1488) is 1530
+PASS baz(object, 745, 1490) is 1532
+PASS baz(object, 746, 1492) is 1534
+PASS baz(object, 747, 1494) is 1536
+PASS baz(object, 748, 1496) is 1538
+PASS baz(object, 749, 1498) is 1540
+PASS baz(object, 750, 1500) is 1542
+PASS baz(object, 751, 1502) is 1544
+PASS baz(object, 752, 1504) is 1546
+PASS baz(object, 753, 1506) is 1548
+PASS baz(object, 754, 1508) is 1550
+PASS baz(object, 755, 1510) is 1552
+PASS baz(object, 756, 1512) is 1554
+PASS baz(object, 757, 1514) is 1556
+PASS baz(object, 758, 1516) is 1558
+PASS baz(object, 759, 1518) is 1560
+PASS baz(object, 760, 1520) is 1562
+PASS baz(object, 761, 1522) is 1564
+PASS baz(object, 762, 1524) is 1566
+PASS baz(object, 763, 1526) is 1568
+PASS baz(object, 764, 1528) is 1570
+PASS baz(object, 765, 1530) is 1572
+PASS baz(object, 766, 1532) is 1574
+PASS baz(object, 767, 1534) is 1576
+PASS baz(object, 768, 1536) is 1578
+PASS baz(object, 769, 1538) is 1580
+PASS baz(object, 770, 1540) is 1582
+PASS baz(object, 771, 1542) is 1584
+PASS baz(object, 772, 1544) is 1586
+PASS baz(object, 773, 1546) is 1588
+PASS baz(object, 774, 1548) is 1590
+PASS baz(object, 775, 1550) is 1592
+PASS baz(object, 776, 1552) is 1594
+PASS baz(object, 777, 1554) is 1596
+PASS baz(object, 778, 1556) is 1598
+PASS baz(object, 779, 1558) is 1600
+PASS baz(object, 780, 1560) is 1602
+PASS baz(object, 781, 1562) is 1604
+PASS baz(object, 782, 1564) is 1606
+PASS baz(object, 783, 1566) is 1608
+PASS baz(object, 784, 1568) is 1610
+PASS baz(object, 785, 1570) is 1612
+PASS baz(object, 786, 1572) is 1614
+PASS baz(object, 787, 1574) is 1616
+PASS baz(object, 788, 1576) is 1618
+PASS baz(object, 789, 1578) is 1620
+PASS baz(object, 790, 1580) is 1622
+PASS baz(object, 791, 1582) is 1624
+PASS baz(object, 792, 1584) is 1626
+PASS baz(object, 793, 1586) is 1628
+PASS baz(object, 794, 1588) is 1630
+PASS baz(object, 795, 1590) is 1632
+PASS baz(object, 796, 1592) is 1634
+PASS baz(object, 797, 1594) is 1636
+PASS baz(object, 798, 1596) is 1638
+PASS baz(object, 799, 1598) is 1640
+PASS baz(object, 800, 1600) is 1642
+PASS baz(object, 801, 1602) is 1644
+PASS baz(object, 802, 1604) is 1646
+PASS baz(object, 803, 1606) is 1648
+PASS baz(object, 804, 1608) is 1650
+PASS baz(object, 805, 1610) is 1652
+PASS baz(object, 806, 1612) is 1654
+PASS baz(object, 807, 1614) is 1656
+PASS baz(object, 808, 1616) is 1658
+PASS baz(object, 809, 1618) is 1660
+PASS baz(object, 810, 1620) is 1662
+PASS baz(object, 811, 1622) is 1664
+PASS baz(object, 812, 1624) is 1666
+PASS baz(object, 813, 1626) is 1668
+PASS baz(object, 814, 1628) is 1670
+PASS baz(object, 815, 1630) is 1672
+PASS baz(object, 816, 1632) is 1674
+PASS baz(object, 817, 1634) is 1676
+PASS baz(object, 818, 1636) is 1678
+PASS baz(object, 819, 1638) is 1680
+PASS baz(object, 820, 1640) is 1682
+PASS baz(object, 821, 1642) is 1684
+PASS baz(object, 822, 1644) is 1686
+PASS baz(object, 823, 1646) is 1688
+PASS baz(object, 824, 1648) is 1690
+PASS baz(object, 825, 1650) is 1692
+PASS baz(object, 826, 1652) is 1694
+PASS baz(object, 827, 1654) is 1696
+PASS baz(object, 828, 1656) is 1698
+PASS baz(object, 829, 1658) is 1700
+PASS baz(object, 830, 1660) is 1702
+PASS baz(object, 831, 1662) is 1704
+PASS baz(object, 832, 1664) is 1706
+PASS baz(object, 833, 1666) is 1708
+PASS baz(object, 834, 1668) is 1710
+PASS baz(object, 835, 1670) is 1712
+PASS baz(object, 836, 1672) is 1714
+PASS baz(object, 837, 1674) is 1716
+PASS baz(object, 838, 1676) is 1718
+PASS baz(object, 839, 1678) is 1720
+PASS baz(object, 840, 1680) is 1722
+PASS baz(object, 841, 1682) is 1724
+PASS baz(object, 842, 1684) is 1726
+PASS baz(object, 843, 1686) is 1728
+PASS baz(object, 844, 1688) is 1730
+PASS baz(object, 845, 1690) is 1732
+PASS baz(object, 846, 1692) is 1734
+PASS baz(object, 847, 1694) is 1736
+PASS baz(object, 848, 1696) is 1738
+PASS baz(object, 849, 1698) is 1740
+PASS baz(object, 850, 1700) is 1742
+PASS baz(object, 851, 1702) is 1744
+PASS baz(object, 852, 1704) is 1746
+PASS baz(object, 853, 1706) is 1748
+PASS baz(object, 854, 1708) is 1750
+PASS baz(object, 855, 1710) is 1752
+PASS baz(object, 856, 1712) is 1754
+PASS baz(object, 857, 1714) is 1756
+PASS baz(object, 858, 1716) is 1758
+PASS baz(object, 859, 1718) is 1760
+PASS baz(object, 860, 1720) is 1762
+PASS baz(object, 861, 1722) is 1764
+PASS baz(object, 862, 1724) is 1766
+PASS baz(object, 863, 1726) is 1768
+PASS baz(object, 864, 1728) is 1770
+PASS baz(object, 865, 1730) is 1772
+PASS baz(object, 866, 1732) is 1774
+PASS baz(object, 867, 1734) is 1776
+PASS baz(object, 868, 1736) is 1778
+PASS baz(object, 869, 1738) is 1780
+PASS baz(object, 870, 1740) is 1782
+PASS baz(object, 871, 1742) is 1784
+PASS baz(object, 872, 1744) is 1786
+PASS baz(object, 873, 1746) is 1788
+PASS baz(object, 874, 1748) is 1790
+PASS baz(object, 875, 1750) is 1792
+PASS baz(object, 876, 1752) is 1794
+PASS baz(object, 877, 1754) is 1796
+PASS baz(object, 878, 1756) is 1798
+PASS baz(object, 879, 1758) is 1800
+PASS baz(object, 880, 1760) is 1802
+PASS baz(object, 881, 1762) is 1804
+PASS baz(object, 882, 1764) is 1806
+PASS baz(object, 883, 1766) is 1808
+PASS baz(object, 884, 1768) is 1810
+PASS baz(object, 885, 1770) is 1812
+PASS baz(object, 886, 1772) is 1814
+PASS baz(object, 887, 1774) is 1816
+PASS baz(object, 888, 1776) is 1818
+PASS baz(object, 889, 1778) is 1820
+PASS baz(object, 890, 1780) is 1822
+PASS baz(object, 891, 1782) is 1824
+PASS baz(object, 892, 1784) is 1826
+PASS baz(object, 893, 1786) is 1828
+PASS baz(object, 894, 1788) is 1830
+PASS baz(object, 895, 1790) is 1832
+PASS baz(object, 896, 1792) is 1834
+PASS baz(object, 897, 1794) is 1836
+PASS baz(object, 898, 1796) is 1838
+PASS baz(object, 899, 1798) is 1840
+PASS baz(object, 900, 1800) is 1842
+PASS baz(object, 901, 1802) is 1844
+PASS baz(object, 902, 1804) is 1846
+PASS baz(object, 903, 1806) is 1848
+PASS baz(object, 904, 1808) is 1850
+PASS baz(object, 905, 1810) is 1852
+PASS baz(object, 906, 1812) is 1854
+PASS baz(object, 907, 1814) is 1856
+PASS baz(object, 908, 1816) is 1858
+PASS baz(object, 909, 1818) is 1860
+PASS baz(object, 910, 1820) is 1862
+PASS baz(object, 911, 1822) is 1864
+PASS baz(object, 912, 1824) is 1866
+PASS baz(object, 913, 1826) is 1868
+PASS baz(object, 914, 1828) is 1870
+PASS baz(object, 915, 1830) is 1872
+PASS baz(object, 916, 1832) is 1874
+PASS baz(object, 917, 1834) is 1876
+PASS baz(object, 918, 1836) is 1878
+PASS baz(object, 919, 1838) is 1880
+PASS baz(object, 920, 1840) is 1882
+PASS baz(object, 921, 1842) is 1884
+PASS baz(object, 922, 1844) is 1886
+PASS baz(object, 923, 1846) is 1888
+PASS baz(object, 924, 1848) is 1890
+PASS baz(object, 925, 1850) is 1892
+PASS baz(object, 926, 1852) is 1894
+PASS baz(object, 927, 1854) is 1896
+PASS baz(object, 928, 1856) is 1898
+PASS baz(object, 929, 1858) is 1900
+PASS baz(object, 930, 1860) is 1902
+PASS baz(object, 931, 1862) is 1904
+PASS baz(object, 932, 1864) is 1906
+PASS baz(object, 933, 1866) is 1908
+PASS baz(object, 934, 1868) is 1910
+PASS baz(object, 935, 1870) is 1912
+PASS baz(object, 936, 1872) is 1914
+PASS baz(object, 937, 1874) is 1916
+PASS baz(object, 938, 1876) is 1918
+PASS baz(object, 939, 1878) is 1920
+PASS baz(object, 940, 1880) is 1922
+PASS baz(object, 941, 1882) is 1924
+PASS baz(object, 942, 1884) is 1926
+PASS baz(object, 943, 1886) is 1928
+PASS baz(object, 944, 1888) is 1930
+PASS baz(object, 945, 1890) is 1932
+PASS baz(object, 946, 1892) is 1934
+PASS baz(object, 947, 1894) is 1936
+PASS baz(object, 948, 1896) is 1938
+PASS baz(object, 949, 1898) is 1940
+PASS baz(object, 950, 1900) is 1942
+PASS baz(object, 951, 1902) is 1944
+PASS baz(object, 952, 1904) is 1946
+PASS baz(object, 953, 1906) is 1948
+PASS baz(object, 954, 1908) is 1950
+PASS baz(object, 955, 1910) is 1952
+PASS baz(object, 956, 1912) is 1954
+PASS baz(object, 957, 1914) is 1956
+PASS baz(object, 958, 1916) is 1958
+PASS baz(object, 959, 1918) is 1960
+PASS baz(object, 960, 1920) is 1962
+PASS baz(object, 961, 1922) is 1964
+PASS baz(object, 962, 1924) is 1966
+PASS baz(object, 963, 1926) is 1968
+PASS baz(object, 964, 1928) is 1970
+PASS baz(object, 965, 1930) is 1972
+PASS baz(object, 966, 1932) is 1974
+PASS baz(object, 967, 1934) is 1976
+PASS baz(object, 968, 1936) is 1978
+PASS baz(object, 969, 1938) is 1980
+PASS baz(object, 970, 1940) is 1982
+PASS baz(object, 971, 1942) is 1984
+PASS baz(object, 972, 1944) is 1986
+PASS baz(object, 973, 1946) is 1988
+PASS baz(object, 974, 1948) is 1990
+PASS baz(object, 975, 1950) is 1992
+PASS baz(object, 976, 1952) is 1994
+PASS baz(object, 977, 1954) is 1996
+PASS baz(object, 978, 1956) is 1998
+PASS baz(object, 979, 1958) is 2000
+PASS baz(object, 980, 1960) is 2002
+PASS baz(object, 981, 1962) is 2004
+PASS baz(object, 982, 1964) is 2006
+PASS baz(object, 983, 1966) is 2008
+PASS baz(object, 984, 1968) is 2010
+PASS baz(object, 985, 1970) is 2012
+PASS baz(object, 986, 1972) is 2014
+PASS baz(object, 987, 1974) is 2016
+PASS baz(object, 988, 1976) is 2018
+PASS baz(object, 989, 1978) is 2020
+PASS baz(object, 990, 1980) is 2022
+PASS baz(object, 991, 1982) is 2024
+PASS baz(object, 992, 1984) is 2026
+PASS baz(object, 993, 1986) is 2028
+PASS baz(object, 994, 1988) is 2030
+PASS baz(object, 995, 1990) is 2032
+PASS baz(object, 996, 1992) is 2034
+PASS baz(object, 997, 1994) is 2036
+PASS baz(object, 998, 1996) is 2038
+PASS baz(object, 999, 1998) is 2040
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-intrinsic-unused-this-method-check.js b/test/webkit/dfg-intrinsic-unused-this-method-check.js
new file mode 100644 (file)
index 0000000..4424400
--- /dev/null
@@ -0,0 +1,50 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that doing intrinsic function optimization does not result in this being lost entirely, if method check optimizations succeed."
+);
+
+function bar(a, b) {
+    return this.f + Math.max(a, b);
+}
+
+function baz(o, a, b) {
+    return o.stuff(a, b);
+}
+
+var functionToCall = Math.max;
+var offset = 0;
+for (var i = 0; i < 1000; ++i) {
+    if (i == 600) {
+        functionToCall = bar;
+        offset = 42;
+    }
+
+    var object = {};
+    object.stuff = functionToCall;
+    object.f = 42;
+
+    shouldBe("baz(object, " + i + ", " + (i * 2) + ")", "" + (offset + Math.max(i, i * 2)));
+}
+
diff --git a/test/webkit/dfg-intrinsic-unused-this.js b/test/webkit/dfg-intrinsic-unused-this.js
new file mode 100644 (file)
index 0000000..f7d3aa5
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that doing intrinsic function optimization does not result in this being lost entirely."
+);
+
+function bar(a, b) {
+    return this.f + Math.max(a, b);
+}
+
+function baz(o, a, b) {
+    return o.stuff(a, b);
+}
+
+var functionToCall = Math.max;
+var offset = 0;
+for (var i = 0; i < 1000; ++i) {
+    if (i == 600) {
+        functionToCall = bar;
+        offset = 42;
+    }
+
+    // Create some bizzare object to prevent method_check optimizations, since those will result in
+    // a failure while the function is still live.
+    var object = {};
+    object["a" + i] = i;
+    object.stuff = functionToCall;
+    object.f = 42;
+
+    shouldBe("baz(object, " + i + ", " + (i * 2) + ")", "" + (offset + Math.max(i, i * 2)));
+}
+
diff --git a/test/webkit/dfg-max-backwards-propagation-expected.txt b/test/webkit/dfg-max-backwards-propagation-expected.txt
new file mode 100644 (file)
index 0000000..28a9aa2
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG knows that a function that appears like Math.max could potentially use value in arbitrary ways, and not just in a context that converts values to numbers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(bar, [, 1.5], 0) is void 0
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS foo(Math.max, [1.5], 0) is Math.max(1.5, 2.5)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-max-backwards-propagation.js b/test/webkit/dfg-max-backwards-propagation.js
new file mode 100644 (file)
index 0000000..b4041e1
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG knows that a function that appears like Math.max could potentially use value in arbitrary ways, and not just in a context that converts values to numbers."
+);
+
+function foo(f, array, i) {
+    return f(array[i], 2.5);
+}
+
+function bar(value) {
+    return value;
+}
+
+for (var i = 0; i < 200; ++i) {
+    var f, array, expected;
+    if (i == 190) {
+        f = "bar";
+        array = "[, 1.5]";
+        expected = "void 0";
+    } else {
+        f = "Math.max";
+        array = "[1.5]";
+        expected = "Math.max(1.5, 2.5)";
+    }
+    shouldBe("foo(" + f + ", " + array + ", 0)", expected);
+}
+
diff --git a/test/webkit/dfg-min-backwards-propagation-expected.txt b/test/webkit/dfg-min-backwards-propagation-expected.txt
new file mode 100644 (file)
index 0000000..6a7f8aa
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG knows that a function that appears like Math.min could potentially use value in arbitrary ways, and not just in a context that converts values to numbers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(bar, [, 1.5], 0) is void 0
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS foo(Math.min, [1.5], 0) is Math.min(1.5, 2.5)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-min-backwards-propagation.js b/test/webkit/dfg-min-backwards-propagation.js
new file mode 100644 (file)
index 0000000..835aefa
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG knows that a function that appears like Math.min could potentially use value in arbitrary ways, and not just in a context that converts values to numbers."
+);
+
+function foo(f, array, i) {
+    return f(array[i], 2.5);
+}
+
+function bar(value) {
+    return value;
+}
+
+for (var i = 0; i < 200; ++i) {
+    var f, array, expected;
+    if (i == 190) {
+        f = "bar";
+        array = "[, 1.5]";
+        expected = "void 0";
+    } else {
+        f = "Math.min";
+        array = "[1.5]";
+        expected = "Math.min(1.5, 2.5)";
+    }
+    shouldBe("foo(" + f + ", " + array + ", 0)", expected);
+}
+
diff --git a/test/webkit/dfg-min-max-expected.txt b/test/webkit/dfg-min-max-expected.txt
new file mode 100644 (file)
index 0000000..fda7fee
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that Math.min and Math.max for doubles works correctly in the DFG JIT.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS doMin(1.5, 2.5) is 1.5
+PASS doMin(2.5, 1.5) is 1.5
+PASS doMin(1.5, 1.5) is 1.5
+PASS doMin(2.5, 2.5) is 2.5
+PASS doMin(1.5, NaN) is NaN
+PASS doMin(2.5, NaN) is NaN
+PASS doMin(NaN, 1.5) is NaN
+PASS doMin(NaN, 2.5) is NaN
+PASS doMin(NaN, NaN) is NaN
+PASS doMax(1.5, 2.5) is 2.5
+PASS doMax(2.5, 1.5) is 2.5
+PASS doMax(1.5, 1.5) is 1.5
+PASS doMax(2.5, 2.5) is 2.5
+PASS doMax(1.5, NaN) is NaN
+PASS doMax(2.5, NaN) is NaN
+PASS doMax(NaN, 1.5) is NaN
+PASS doMax(NaN, 2.5) is NaN
+PASS doMax(NaN, NaN) is NaN
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-min-max.js b/test/webkit/dfg-min-max.js
new file mode 100644 (file)
index 0000000..da47ca2
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that Math.min and Math.max for doubles works correctly in the DFG JIT."
+);
+
+function doMin(a, b) {
+    return Math.min(a, b);
+}
+
+function doMax(a, b) {
+    return Math.max(a, b);
+}
+
+for (var i = 0; i < 1000; ++i) {
+    doMin(1.5, 2.5);
+    doMax(1.5, 2.5);
+}
+
+shouldBe("doMin(1.5, 2.5)", "1.5");
+shouldBe("doMin(2.5, 1.5)", "1.5");
+shouldBe("doMin(1.5, 1.5)", "1.5");
+shouldBe("doMin(2.5, 2.5)", "2.5");
+
+shouldBe("doMin(1.5, NaN)", "NaN");
+shouldBe("doMin(2.5, NaN)", "NaN");
+shouldBe("doMin(NaN, 1.5)", "NaN");
+shouldBe("doMin(NaN, 2.5)", "NaN");
+
+shouldBe("doMin(NaN, NaN)", "NaN");
+
+shouldBe("doMax(1.5, 2.5)", "2.5");
+shouldBe("doMax(2.5, 1.5)", "2.5");
+shouldBe("doMax(1.5, 1.5)", "1.5");
+shouldBe("doMax(2.5, 2.5)", "2.5");
+
+shouldBe("doMax(1.5, NaN)", "NaN");
+shouldBe("doMax(2.5, NaN)", "NaN");
+shouldBe("doMax(NaN, 1.5)", "NaN");
+shouldBe("doMax(NaN, 2.5)", "NaN");
+
+shouldBe("doMax(NaN, NaN)", "NaN");
+
+var successfullyParsed = true;
diff --git a/test/webkit/dfg-mispredict-variable-but-prove-int-expected.txt b/test/webkit/dfg-mispredict-variable-but-prove-int-expected.txt
new file mode 100644 (file)
index 0000000..9a5eedf
--- /dev/null
@@ -0,0 +1,233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a variable predicted to be either int or double but proven to be an int does confuse the Branch logic.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(0, 1, 0) is 0.5
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS foo(i, i + 1, i + 2) is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-mispredict-variable-but-prove-int.js b/test/webkit/dfg-mispredict-variable-but-prove-int.js
new file mode 100644 (file)
index 0000000..c312670
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a variable predicted to be either int or double but proven to be an int does confuse the Branch logic."
+);
+
+function foo(a, b, c) {
+    a = b;
+    if (c) {
+        if (a)
+            return 1;
+        else
+            return 2;
+    } else if (b)
+        a = 0.5;
+    return a;
+}
+
+shouldBe("foo(0, 1, 0)", "0.5");
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(i, i + 1, i + 2)", "1");
+
diff --git a/test/webkit/dfg-mul-big-integer-with-small-integer-and-bitor-expected.txt b/test/webkit/dfg-mul-big-integer-with-small-integer-and-bitor-expected.txt
new file mode 100644 (file)
index 0000000..13e5ed2
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when you multiply a big unknown integer with a small known integer and use the result in a bitop.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS foo(2147483647) is -65536
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-mul-big-integer-with-small-integer-and-bitor.js b/test/webkit/dfg-mul-big-integer-with-small-integer-and-bitor.js
new file mode 100644 (file)
index 0000000..51401ea
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when you multiply a big unknown integer with a small known integer and use the result in a bitop."
+);
+
+function foo(a) {
+    return (a * 65536) | 0;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo(2147483647)", "-65536");
+
+
+
diff --git a/test/webkit/dfg-mul-big-integer-with-small-integer-and-detect-overflow-expected.txt b/test/webkit/dfg-mul-big-integer-with-small-integer-and-detect-overflow-expected.txt
new file mode 100644 (file)
index 0000000..df0a2ea
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when you multiply a big unknown integer with a small known integer and detect that we have had an overflow.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-mul-big-integer-with-small-integer-and-detect-overflow.js b/test/webkit/dfg-mul-big-integer-with-small-integer-and-detect-overflow.js
new file mode 100644 (file)
index 0000000..65ed8b7
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when you multiply a big unknown integer with a small known integer and detect that we have had an overflow."
+);
+
+function foo(a) {
+    return a * 65536;
+}
+
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo(2147483647)", "140737488289792");
+
+
diff --git a/test/webkit/dfg-mul-big-integer-with-small-integer-expected.txt b/test/webkit/dfg-mul-big-integer-with-small-integer-expected.txt
new file mode 100644 (file)
index 0000000..8e9ed7f
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when you multiply a big unknown integer with a small known integer.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS foo(2147483647) is 140737488289792
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-mul-big-integer-with-small-integer.js b/test/webkit/dfg-mul-big-integer-with-small-integer.js
new file mode 100644 (file)
index 0000000..8450ced
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when you multiply a big unknown integer with a small known integer."
+);
+
+function foo(a) {
+    return a * 65536;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo(2147483647)", "140737488289792");
diff --git a/test/webkit/dfg-mul-big-integers-expected.txt b/test/webkit/dfg-mul-big-integers-expected.txt
new file mode 100644 (file)
index 0000000..05d8a98
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when you multiply large integers in an integer context.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS foo(2147483647, 2147483646) is -2147483648
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-mul-big-integers.js b/test/webkit/dfg-mul-big-integers.js
new file mode 100644 (file)
index 0000000..0176a25
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when you multiply large integers in an integer context."
+);
+
+function foo(a, b) {
+    return (a * b) | 0;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo(2147483647, 2147483646)", "-2147483648");
+
+
diff --git a/test/webkit/dfg-multi-basic-block-structure-clobber-expected.txt b/test/webkit/dfg-multi-basic-block-structure-clobber-expected.txt
new file mode 100644 (file)
index 0000000..6912efb
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that a structure clobber in a basic block that does not touch a live variable causes that variable's structure to be correctly clobbered.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is 2
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS foo(predicate, {f:object}) is NaN
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-multi-basic-block-structure-clobber.js b/test/webkit/dfg-multi-basic-block-structure-clobber.js
new file mode 100644 (file)
index 0000000..a4d8bdb
--- /dev/null
@@ -0,0 +1,56 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that a structure clobber in a basic block that does not touch a live variable causes that variable's structure to be correctly clobbered."
+);
+
+var clobberedObject;
+
+function bar() {
+    if (!clobberedObject)
+        return;
+    delete clobberedObject.f;
+    clobberedObject.g = 42;
+}
+
+function foo(p, o_) {
+    var o = o_.f; // Force this block to have a SetLocal.
+    var x = o.f;
+    if (p)
+        bar();
+    return x + o.f;
+}
+
+var expected = 2;
+
+for (var i = 0; i < 200; ++i) {
+    var object = {f:1};
+    var predicate = true;
+    if (i >= 150) {
+        clobberedObject = object;
+        expected = 0/0; // "NaN"
+    }
+    shouldBe("foo(predicate, {f:object})", "" + expected);
+}
+
diff --git a/test/webkit/dfg-multiply-expected.txt b/test/webkit/dfg-multiply-expected.txt
new file mode 100644 (file)
index 0000000..8cffb7e
--- /dev/null
@@ -0,0 +1,1052 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that the DFG can multiply numbers correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1) is 2
+PASS doMultiplyConstant2(2) is 4
+PASS doMultiplyConstant2(4) is 8
+PASS doMultiplyConstant3(1) is 3
+PASS doMultiplyConstant3(2) is 6
+PASS doMultiplyConstant3(4) is 12
+PASS doMultiplyConstant4(1) is 4
+PASS doMultiplyConstant4(2) is 8
+PASS doMultiplyConstant4(4) is 16
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS doMultiplyConstant2(1073741824) is 2147483648
+PASS doMultiplyConstant2(2147483648) is 4294967296
+PASS doMultiplyConstant3(1073741824) is 3221225472
+PASS doMultiplyConstant3(2147483648) is 6442450944
+PASS doMultiplyConstant4(1073741824) is 4294967296
+PASS doMultiplyConstant4(2147483648) is 8589934592
+PASS doMultiplyConstant2(-1073741824) is -2147483648
+PASS doMultiplyConstant2(-2147483648) is -4294967296
+PASS doMultiplyConstant3(-1073741824) is -3221225472
+PASS doMultiplyConstant3(-2147483648) is -6442450944
+PASS doMultiplyConstant4(-1073741824) is -4294967296
+PASS doMultiplyConstant4(-2147483648) is -8589934592
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-multiply.js b/test/webkit/dfg-multiply.js
new file mode 100644 (file)
index 0000000..95f278f
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that the DFG can multiply numbers correctly."
+);
+
+function doMultiplyConstant2(a) {
+    return a * 2;
+}
+
+function doMultiplyConstant3(a) {
+    return a * 3;
+}
+
+function doMultiplyConstant4(a) {
+    return a * 4;
+}
+
+// Get it to compile.
+for (var i = 0; i < 100; ++i) {
+    shouldBe("doMultiplyConstant2(1)", "2");
+    shouldBe("doMultiplyConstant2(2)", "4");
+    shouldBe("doMultiplyConstant2(4)", "8");
+    shouldBe("doMultiplyConstant3(1)", "3");
+    shouldBe("doMultiplyConstant3(2)", "6");
+    shouldBe("doMultiplyConstant3(4)", "12");
+    shouldBe("doMultiplyConstant4(1)", "4");
+    shouldBe("doMultiplyConstant4(2)", "8");
+    shouldBe("doMultiplyConstant4(4)", "16");
+}
+
+// Now do evil.
+for (var i = 0; i < 10; ++i) {
+    shouldBe("doMultiplyConstant2(1073741824)", "2147483648");
+    shouldBe("doMultiplyConstant2(2147483648)", "4294967296");
+    shouldBe("doMultiplyConstant3(1073741824)", "3221225472");
+    shouldBe("doMultiplyConstant3(2147483648)", "6442450944");
+    shouldBe("doMultiplyConstant4(1073741824)", "4294967296");
+    shouldBe("doMultiplyConstant4(2147483648)", "8589934592");
+    shouldBe("doMultiplyConstant2(-1073741824)", "-2147483648");
+    shouldBe("doMultiplyConstant2(-2147483648)", "-4294967296");
+    shouldBe("doMultiplyConstant3(-1073741824)", "-3221225472");
+    shouldBe("doMultiplyConstant3(-2147483648)", "-6442450944");
+    shouldBe("doMultiplyConstant4(-1073741824)", "-4294967296");
+    shouldBe("doMultiplyConstant4(-2147483648)", "-8589934592");
+}
+
diff --git a/test/webkit/dfg-negative-array-index-expected.txt b/test/webkit/dfg-negative-array-index-expected.txt
new file mode 100644 (file)
index 0000000..30d6a27
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that storing into a negative array index works right.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS array[-1] is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-negative-array-index.js b/test/webkit/dfg-negative-array-index.js
new file mode 100644 (file)
index 0000000..f23c7fb
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that storing into a negative array index works right."
+);
+
+function foo(a, i) {
+    a[i] = 42;
+}
+
+for (var i = 0; i < 100; ++i) {
+    var array = [];
+    foo(array, -1);
+    shouldBe("array[-1]", "42");
+}
+
diff --git a/test/webkit/dfg-obvious-constant-cfa-expected.txt b/test/webkit/dfg-obvious-constant-cfa-expected.txt
new file mode 100644 (file)
index 0000000..465a41d
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that if the CFA performs constant folding on an obvious set and then get of a captured local, then we don't crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is 228300
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-obvious-constant-cfa.js b/test/webkit/dfg-obvious-constant-cfa.js
new file mode 100644 (file)
index 0000000..fc5d3d6
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that if the CFA performs constant folding on an obvious set and then get of a captured local, then we don't crash."
+);
+
+function bar(a, b) {
+    var x;
+    var y;
+    function baz() {
+        return x + y;
+    }
+    x = 13;
+    y = 16;
+    if (y == 16) {
+        return x + a + b + baz();
+    } else
+        return 24;
+}
+
+var result = 0;
+for (var i = 0; i < 200; ++i)
+    result += bar(i, 1000);
+
+shouldBe("result", "228300");
diff --git a/test/webkit/dfg-other-branch-expected.txt b/test/webkit/dfg-other-branch-expected.txt
new file mode 100644 (file)
index 0000000..6ace446
--- /dev/null
@@ -0,0 +1,52 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that speculating other on a branch does not corrupt state.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:i}) is "no"
+PASS foo({f:i}) is "yes"
+PASS foo({f:i}) is "yes"
+PASS foo({f:i}) is "yes"
+PASS foo({f:i}) is "yes"
+PASS foo({f:i}) is "yes"
+PASS foo({f:i}) is "yes"
+PASS foo({f:i}) is "yes"
+PASS foo({f:i}) is "yes"
+PASS foo({f:i}) is "yes"
+PASS bar({f:i}) is true
+PASS bar({f:i}) is false
+PASS bar({f:i}) is false
+PASS bar({f:i}) is false
+PASS bar({f:i}) is false
+PASS bar({f:i}) is false
+PASS bar({f:i}) is false
+PASS bar({f:i}) is false
+PASS bar({f:i}) is false
+PASS bar({f:i}) is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-other-branch.js b/test/webkit/dfg-other-branch.js
new file mode 100644 (file)
index 0000000..6aa22dc
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that speculating other on a branch does not corrupt state."
+);
+
+function foo(a) {
+    if (a.f)
+        return "yes";
+    else
+        return "no";
+}
+
+function bar(a) {
+    return !a.f;
+}
+
+for (var i = 0; i < 100; ++i)
+    foo({f:void(0)});
+
+for (var i = 0; i < 10; ++i)
+    shouldBe("foo({f:i})", i ? "\"yes\"" : "\"no\"");
+
+for (var i = 0; i < 100; ++i)
+    bar({f:void(0)});
+
+for (var i = 0; i < 10; ++i)
+    shouldBe("bar({f:i})", i ? "false" : "true");
+
+var successfullyParsed = true;
diff --git a/test/webkit/dfg-patchable-get-by-id-after-watchpoint-expected.txt b/test/webkit/dfg-patchable-get-by-id-after-watchpoint-expected.txt
new file mode 100644 (file)
index 0000000..d78f345
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that a patchable GetById right after a watchpoint has the appropriate nop padding.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS foo(o, p) is 27
+PASS foo(o, p) is 44
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-patchable-get-by-id-after-watchpoint.js b/test/webkit/dfg-patchable-get-by-id-after-watchpoint.js
new file mode 100644 (file)
index 0000000..9866126
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that a patchable GetById right after a watchpoint has the appropriate nop padding."
+);
+
+function foo(o, p) {
+    var a = p.f;
+    var b = o.f; // Watchpoint.
+    var c = p.g; // Patchable GetById.
+    return b(a + c);
+}
+
+function O() {
+}
+
+O.prototype.f = function(x) { return x + 1; };
+
+var o = new O();
+
+function P1() {
+}
+
+P1.prototype.g = 42;
+
+function P2() {
+}
+
+P2.prototype.g = 24;
+
+var p1 = new P1();
+var p2 = new P2();
+
+p1.f = 1;
+p2.f = 2;
+
+for (var i = 0; i < 200; ++i) {
+    var p = (i % 2) ? p1 : p2;
+    var expected = (i % 2) ? 44 : 27;
+    if (i == 150) {
+        // Cause first the watchpoint on o.f to fire, and then the GetById
+        // to be reset.
+        O.prototype.g = 57; // Fire the watchpoint.
+        P1.prototype.h = 58; // Reset the GetById.
+        P2.prototype.h = 59; // Not necessary, but what the heck - this resets the GetById even more.
+    }
+    shouldBe("foo(o, p)", "" + expected);
+}
+
diff --git a/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object-expected.txt b/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object-expected.txt
new file mode 100644 (file)
index 0000000..fb9ff07
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the peephole CompareEq optimization for the case where one side is predicted final object and the other side is predicted either final object or other (i.e. null or undefined) doesn't assert when both sides are also proven final object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, 42, true]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js b/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js
new file mode 100644 (file)
index 0000000..f8a6794
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the peephole CompareEq optimization for the case where one side is predicted final object and the other side is predicted either final object or other (i.e. null or undefined) doesn't assert when both sides are also proven final object."
+);
+
+function foo(a, b) {
+    var result = [];
+    result.push(a.f);
+    result.push(b.f);
+    if (a == b)
+        result.push(true);
+    else
+        result.push(false);
+    return result;
+}
+
+for (var i = 0; i < 100; ++i) {
+    if (i%2) {
+        var o = {f:42};
+        shouldBe("foo(o, o)", "[42, 42, true]");
+    } else
+        shouldThrow("foo({f:42}, null)");
+}
+
diff --git a/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object-expected.txt b/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object-expected.txt
new file mode 100644 (file)
index 0000000..52ca1ea
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the peephole CompareEq optimization for the case where one side is predicted final object and the other side is predicted either final object or other (i.e. null or undefined) doesn't assert when the other side is also proven final object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS foo({f:42}, null) threw exception TypeError: Cannot read property 'f' of null.
+PASS foo(o, o) is [42, true]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object.js b/test/webkit/dfg-peephole-compare-final-object-to-final-object-or-other-when-proven-final-object.js
new file mode 100644 (file)
index 0000000..5e27539
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the peephole CompareEq optimization for the case where one side is predicted final object and the other side is predicted either final object or other (i.e. null or undefined) doesn't assert when the other side is also proven final object."
+);
+
+function foo(a, b) {
+    var result = [];
+    result.push(b.f);
+    if (a == b)
+        result.push(true);
+    else
+        result.push(false);
+    return result;
+}
+
+for (var i = 0; i < 100; ++i) {
+    if (i%2) {
+        var o = {f:42};
+        shouldBe("foo(o, o)", "[42, true]");
+    } else
+        shouldThrow("foo({f:42}, null)");
+}
+
diff --git a/test/webkit/dfg-phantom-base-expected.txt b/test/webkit/dfg-phantom-base-expected.txt
new file mode 100644 (file)
index 0000000..15e7a99
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we use Phantom on the base of put_by_base correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-phantom-base.js b/test/webkit/dfg-phantom-base.js
new file mode 100644 (file)
index 0000000..f881b89
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we use Phantom on the base of put_by_base correctly."
+);
+
+function foo(o) {
+    var x = o;
+    var y = o.f;
+    if (y) {
+        o.g.h;
+        return !x;
+    }
+
+    // Do things to ensure that the structure check on o is not hoisted.
+    return o + o + o + o + o;
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}})", "false");
+
diff --git a/test/webkit/dfg-phantom-get-local-expected.txt b/test/webkit/dfg-phantom-get-local-expected.txt
new file mode 100644 (file)
index 0000000..df9d7ac
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that Phantom(GetLocal) is treated as being relevant to OSR.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}}) is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-phantom-get-local.js b/test/webkit/dfg-phantom-get-local.js
new file mode 100644 (file)
index 0000000..d813436
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that Phantom(GetLocal) is treated as being relevant to OSR."
+);
+
+function foo(o) {
+    var x = o;
+    var y = o.f;
+    if (y) {
+        o.g.h;
+        return !x;
+    }
+
+    // Do things to ensure that the structure check on o is not hoisted.
+    return o + o + o + o + o;
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(i < 190 ? {f:42, g:{h:3}} : {f:42, g:{}})", "false");
+
diff --git a/test/webkit/dfg-post-inc-then-exit-expected.txt b/test/webkit/dfg-post-inc-then-exit-expected.txt
new file mode 100644 (file)
index 0000000..bbae5ca
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens if you post-inc and then OSR exit.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS o.f is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-post-inc-then-exit.js b/test/webkit/dfg-post-inc-then-exit.js
new file mode 100644 (file)
index 0000000..ddcc3e4
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens if you post-inc and then OSR exit."
+);
+
+function foo(o, i) {
+    o.f.f = i++;
+}
+
+for (var i = 0; i < 100; ++i) {
+    var o = {};
+    if (i == 99)
+        o.f = 42;
+    foo({f:o}, 0);
+    shouldBe("o.f", "0");
+}
diff --git a/test/webkit/dfg-proto-access-inline-osr-exit-expected.txt b/test/webkit/dfg-proto-access-inline-osr-exit-expected.txt
new file mode 100644 (file)
index 0000000..2a29f31
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when we OSR exit on an inlined prototype access due to a change in the prototype chain.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS foo({g:new Thingy()}) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-proto-access-inline-osr-exit.js b/test/webkit/dfg-proto-access-inline-osr-exit.js
new file mode 100644 (file)
index 0000000..3529980
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when we OSR exit on an inlined prototype access due to a change in the prototype chain."
+);
+
+function foo(o) {
+    return o.g.f;
+}
+
+function Thingy() {
+}
+
+var myProto = {f:42};
+
+Thingy.prototype = myProto;
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150)
+        myProto.g = 67;
+    shouldBe("foo({g:new Thingy()})", "42");
+}
+
diff --git a/test/webkit/dfg-proto-stub-watchpoint-fire-expected.txt b/test/webkit/dfg-proto-stub-watchpoint-fire-expected.txt
new file mode 100644 (file)
index 0000000..eb91188
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we don't crash if a watchpoint on prototype access stubs is fired.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS foo((i % 2) ? new A() : new B()) is 43
+PASS foo((i % 2) ? new A() : new B()) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-proto-stub-watchpoint-fire.js b/test/webkit/dfg-proto-stub-watchpoint-fire.js
new file mode 100644 (file)
index 0000000..45e9dbd
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we don't crash if a watchpoint on prototype access stubs is fired."
+);
+
+function A() { }
+function B() { }
+
+A.prototype.f = 42;
+B.prototype.f = 43;
+
+
+function foo(o) {
+    return o.f;
+}
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 150)
+        A.prototype.g = 63;
+    shouldBe("foo((i % 2) ? new A() : new B())", "" + ((i % 2) ? 42 : 43));
+}
diff --git a/test/webkit/dfg-proven-sqrt-backwards-propagation-expected.txt b/test/webkit/dfg-proven-sqrt-backwards-propagation-expected.txt
new file mode 100644 (file)
index 0000000..fdb5334
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG knows that a Math.sqrt could potentially use value in arbitrary ways, and not just in a context that converts values to numbers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is Math.sqrt(1.5)
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS foo(array, 0) is void 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-proven-sqrt-backwards-propagation.js b/test/webkit/dfg-proven-sqrt-backwards-propagation.js
new file mode 100644 (file)
index 0000000..5bc66d9
--- /dev/null
@@ -0,0 +1,50 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG knows that a Math.sqrt could potentially use value in arbitrary ways, and not just in a context that converts values to numbers."
+);
+
+function foo(array, i) {
+    var x = array[i];
+    return Math.sqrt(x);
+}
+
+function bar(value) {
+    return value;
+}
+
+for (var i = 0; i < 200; ++i) {
+    if (i == 190)
+        Math.sqrt = bar;
+    var array, expected;
+    if (i >= 190) {
+        array = [, 1.5];
+        expected = "void 0";
+    } else {
+        array = [1.5];
+        expected = "Math.sqrt(1.5)";
+    }
+    shouldBe("foo(array, 0)", expected);
+}
+
diff --git a/test/webkit/dfg-put-by-id-allocate-storage-expected.txt b/test/webkit/dfg-put-by-id-allocate-storage-expected.txt
new file mode 100644 (file)
index 0000000..0f3b10e
--- /dev/null
@@ -0,0 +1,1082 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a DFG PutById that allocates property storage works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-put-by-id-allocate-storage-polymorphic-expected.txt b/test/webkit/dfg-put-by-id-allocate-storage-polymorphic-expected.txt
new file mode 100644 (file)
index 0000000..192e923
--- /dev/null
@@ -0,0 +1,1232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a polymorphic DFG PutById that allocates property storage works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.foo is void 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-put-by-id-allocate-storage-polymorphic.js b/test/webkit/dfg-put-by-id-allocate-storage-polymorphic.js
new file mode 100644 (file)
index 0000000..5a8e2c0
--- /dev/null
@@ -0,0 +1,58 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a polymorphic DFG PutById that allocates property storage works."
+);
+
+function foo(o) {
+    o.a = 1;
+    o.b = 2;
+    o.c = 3;
+    o.d = 4;
+    o.e = 5;
+    o.f = 6;
+    o.g = 7;
+}
+
+for (var i = 0; i < 150; ++i) {
+    var o;
+    if (i % 2)
+        o = {};
+    else
+        o = {foo: 42};
+    foo(o);
+    shouldBe("o.a", "1");
+    shouldBe("o.b", "2");
+    shouldBe("o.c", "3");
+    shouldBe("o.d", "4");
+    shouldBe("o.e", "5");
+    shouldBe("o.f", "6");
+    shouldBe("o.g", "7");
+    if (!(i % 2))
+        shouldBe("o.foo", "42");
+    else
+        shouldBe("o.foo", "void 0");
+}
+
+
diff --git a/test/webkit/dfg-put-by-id-allocate-storage.js b/test/webkit/dfg-put-by-id-allocate-storage.js
new file mode 100644 (file)
index 0000000..4bd9d45
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a DFG PutById that allocates property storage works."
+);
+
+function foo() {
+    var o = {};
+    o.a = 1;
+    o.b = 2;
+    o.c = 3;
+    o.d = 4;
+    o.e = 5;
+    o.f = 6;
+    o.g = 7;
+    return o;
+}
+
+for (var i = 0; i < 150; ++i) {
+    var o = foo();
+    shouldBe("o.a", "1");
+    shouldBe("o.b", "2");
+    shouldBe("o.c", "3");
+    shouldBe("o.d", "4");
+    shouldBe("o.e", "5");
+    shouldBe("o.f", "6");
+    shouldBe("o.g", "7");
+}
+
+
diff --git a/test/webkit/dfg-put-by-id-prototype-check-expected.txt b/test/webkit/dfg-put-by-id-prototype-check-expected.txt
new file mode 100644 (file)
index 0000000..74d9ccb
--- /dev/null
@@ -0,0 +1,1132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG CFA is not overzealous in removing prototype structure checks for put_by_id transitions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.f is 0
+PASS o.f is 1
+PASS o.f is 2
+PASS o.f is 3
+PASS o.f is 4
+PASS o.f is 5
+PASS o.f is 6
+PASS o.f is 7
+PASS o.f is 8
+PASS o.f is 9
+PASS o.f is 10
+PASS o.f is 11
+PASS o.f is 12
+PASS o.f is 13
+PASS o.f is 14
+PASS o.f is 15
+PASS o.f is 16
+PASS o.f is 17
+PASS o.f is 18
+PASS o.f is 19
+PASS o.f is 20
+PASS o.f is 21
+PASS o.f is 22
+PASS o.f is 23
+PASS o.f is 24
+PASS o.f is 25
+PASS o.f is 26
+PASS o.f is 27
+PASS o.f is 28
+PASS o.f is 29
+PASS o.f is 30
+PASS o.f is 31
+PASS o.f is 32
+PASS o.f is 33
+PASS o.f is 34
+PASS o.f is 35
+PASS o.f is 36
+PASS o.f is 37
+PASS o.f is 38
+PASS o.f is 39
+PASS o.f is 40
+PASS o.f is 41
+PASS o.f is 42
+PASS o.f is 43
+PASS o.f is 44
+PASS o.f is 45
+PASS o.f is 46
+PASS o.f is 47
+PASS o.f is 48
+PASS o.f is 49
+PASS o.f is 50
+PASS o.f is 51
+PASS o.f is 52
+PASS o.f is 53
+PASS o.f is 54
+PASS o.f is 55
+PASS o.f is 56
+PASS o.f is 57
+PASS o.f is 58
+PASS o.f is 59
+PASS o.f is 60
+PASS o.f is 61
+PASS o.f is 62
+PASS o.f is 63
+PASS o.f is 64
+PASS o.f is 65
+PASS o.f is 66
+PASS o.f is 67
+PASS o.f is 68
+PASS o.f is 69
+PASS o.f is 70
+PASS o.f is 71
+PASS o.f is 72
+PASS o.f is 73
+PASS o.f is 74
+PASS o.f is 75
+PASS o.f is 76
+PASS o.f is 77
+PASS o.f is 78
+PASS o.f is 79
+PASS o.f is 80
+PASS o.f is 81
+PASS o.f is 82
+PASS o.f is 83
+PASS o.f is 84
+PASS o.f is 85
+PASS o.f is 86
+PASS o.f is 87
+PASS o.f is 88
+PASS o.f is 89
+PASS o.f is 90
+PASS o.f is 91
+PASS o.f is 92
+PASS o.f is 93
+PASS o.f is 94
+PASS o.f is 95
+PASS o.f is 96
+PASS o.f is 97
+PASS o.f is 98
+PASS o.f is 99
+PASS o.f is 100
+PASS o.f is 101
+PASS o.f is 102
+PASS o.f is 103
+PASS o.f is 104
+PASS o.f is 105
+PASS o.f is 106
+PASS o.f is 107
+PASS o.f is 108
+PASS o.f is 109
+PASS o.f is 110
+PASS o.f is 111
+PASS o.f is 112
+PASS o.f is 113
+PASS o.f is 114
+PASS o.f is 115
+PASS o.f is 116
+PASS o.f is 117
+PASS o.f is 118
+PASS o.f is 119
+PASS o.f is 120
+PASS o.f is 121
+PASS o.f is 122
+PASS o.f is 123
+PASS o.f is 124
+PASS o.f is 125
+PASS o.f is 126
+PASS o.f is 127
+PASS o.f is 128
+PASS o.f is 129
+PASS o.f is 130
+PASS o.f is 131
+PASS o.f is 132
+PASS o.f is 133
+PASS o.f is 134
+PASS o.f is 135
+PASS o.f is 136
+PASS o.f is 137
+PASS o.f is 138
+PASS o.f is 139
+PASS o.f is 140
+PASS o.f is 141
+PASS o.f is 142
+PASS o.f is 143
+PASS o.f is 144
+PASS o.f is 145
+PASS o.f is 146
+PASS o.f is 147
+PASS o.f is 148
+PASS o.f is 149
+PASS o.f is 150
+PASS o.f is 151
+PASS o.f is 152
+PASS o.f is 153
+PASS o.f is 154
+PASS o.f is 155
+PASS o.f is 156
+PASS o.f is 157
+PASS o.f is 158
+PASS o.f is 159
+PASS o.f is 160
+PASS o.f is 161
+PASS o.f is 162
+PASS o.f is 163
+PASS o.f is 164
+PASS o.f is 165
+PASS o.f is 166
+PASS o.f is 167
+PASS o.f is 168
+PASS o.f is 169
+PASS o.f is 170
+PASS o.f is 171
+PASS o.f is 172
+PASS o.f is 173
+PASS o.f is 174
+PASS o.f is 175
+PASS o.f is 176
+PASS o.f is 177
+PASS o.f is 178
+PASS o.f is 179
+PASS o.f is 180
+PASS o.f is 181
+PASS o.f is 182
+PASS o.f is 183
+PASS o.f is 184
+PASS o.f is 185
+PASS o.f is 186
+PASS o.f is 187
+PASS o.f is 188
+PASS o.f is 189
+PASS o.f is 190
+PASS o.f is 191
+PASS o.f is 192
+PASS o.f is 193
+PASS o.f is 194
+PASS o.f is 195
+PASS o.f is 196
+PASS o.f is 197
+PASS o.f is 198
+PASS o.f is 199
+PASS o.f is 200
+PASS o.f is 201
+PASS o.f is 202
+PASS o.f is 203
+PASS o.f is 204
+PASS o.f is 205
+PASS o.f is 206
+PASS o.f is 207
+PASS o.f is 208
+PASS o.f is 209
+PASS o.f is 210
+PASS o.f is 211
+PASS o.f is 212
+PASS o.f is 213
+PASS o.f is 214
+PASS o.f is 215
+PASS o.f is 216
+PASS o.f is 217
+PASS o.f is 218
+PASS o.f is 219
+PASS o.f is 220
+PASS o.f is 221
+PASS o.f is 222
+PASS o.f is 223
+PASS o.f is 224
+PASS o.f is 225
+PASS o.f is 226
+PASS o.f is 227
+PASS o.f is 228
+PASS o.f is 229
+PASS o.f is 230
+PASS o.f is 231
+PASS o.f is 232
+PASS o.f is 233
+PASS o.f is 234
+PASS o.f is 235
+PASS o.f is 236
+PASS o.f is 237
+PASS o.f is 238
+PASS o.f is 239
+PASS o.f is 240
+PASS o.f is 241
+PASS o.f is 242
+PASS o.f is 243
+PASS o.f is 244
+PASS o.f is 245
+PASS o.f is 246
+PASS o.f is 247
+PASS o.f is 248
+PASS o.f is 249
+PASS o.f is 250
+PASS o.f is 251
+PASS o.f is 252
+PASS o.f is 253
+PASS o.f is 254
+PASS o.f is 255
+PASS o.f is 256
+PASS o.f is 257
+PASS o.f is 258
+PASS o.f is 259
+PASS o.f is 260
+PASS o.f is 261
+PASS o.f is 262
+PASS o.f is 263
+PASS o.f is 264
+PASS o.f is 265
+PASS o.f is 266
+PASS o.f is 267
+PASS o.f is 268
+PASS o.f is 269
+PASS o.f is 270
+PASS o.f is 271
+PASS o.f is 272
+PASS o.f is 273
+PASS o.f is 274
+PASS o.f is 275
+PASS o.f is 276
+PASS o.f is 277
+PASS o.f is 278
+PASS o.f is 279
+PASS o.f is 280
+PASS o.f is 281
+PASS o.f is 282
+PASS o.f is 283
+PASS o.f is 284
+PASS o.f is 285
+PASS o.f is 286
+PASS o.f is 287
+PASS o.f is 288
+PASS o.f is 289
+PASS o.f is 290
+PASS o.f is 291
+PASS o.f is 292
+PASS o.f is 293
+PASS o.f is 294
+PASS o.f is 295
+PASS o.f is 296
+PASS o.f is 297
+PASS o.f is 298
+PASS o.f is 299
+PASS o.f is 300
+PASS o.f is 301
+PASS o.f is 302
+PASS o.f is 303
+PASS o.f is 304
+PASS o.f is 305
+PASS o.f is 306
+PASS o.f is 307
+PASS o.f is 308
+PASS o.f is 309
+PASS o.f is 310
+PASS o.f is 311
+PASS o.f is 312
+PASS o.f is 313
+PASS o.f is 314
+PASS o.f is 315
+PASS o.f is 316
+PASS o.f is 317
+PASS o.f is 318
+PASS o.f is 319
+PASS o.f is 320
+PASS o.f is 321
+PASS o.f is 322
+PASS o.f is 323
+PASS o.f is 324
+PASS o.f is 325
+PASS o.f is 326
+PASS o.f is 327
+PASS o.f is 328
+PASS o.f is 329
+PASS o.f is 330
+PASS o.f is 331
+PASS o.f is 332
+PASS o.f is 333
+PASS o.f is 334
+PASS o.f is 335
+PASS o.f is 336
+PASS o.f is 337
+PASS o.f is 338
+PASS o.f is 339
+PASS o.f is 340
+PASS o.f is 341
+PASS o.f is 342
+PASS o.f is 343
+PASS o.f is 344
+PASS o.f is 345
+PASS o.f is 346
+PASS o.f is 347
+PASS o.f is 348
+PASS o.f is 349
+PASS o.f is 350
+PASS o.f is 351
+PASS o.f is 352
+PASS o.f is 353
+PASS o.f is 354
+PASS o.f is 355
+PASS o.f is 356
+PASS o.f is 357
+PASS o.f is 358
+PASS o.f is 359
+PASS o.f is 360
+PASS o.f is 361
+PASS o.f is 362
+PASS o.f is 363
+PASS o.f is 364
+PASS o.f is 365
+PASS o.f is 366
+PASS o.f is 367
+PASS o.f is 368
+PASS o.f is 369
+PASS o.f is 370
+PASS o.f is 371
+PASS o.f is 372
+PASS o.f is 373
+PASS o.f is 374
+PASS o.f is 375
+PASS o.f is 376
+PASS o.f is 377
+PASS o.f is 378
+PASS o.f is 379
+PASS o.f is 380
+PASS o.f is 381
+PASS o.f is 382
+PASS o.f is 383
+PASS o.f is 384
+PASS o.f is 385
+PASS o.f is 386
+PASS o.f is 387
+PASS o.f is 388
+PASS o.f is 389
+PASS o.f is 390
+PASS o.f is 391
+PASS o.f is 392
+PASS o.f is 393
+PASS o.f is 394
+PASS o.f is 395
+PASS o.f is 396
+PASS o.f is 397
+PASS o.f is 398
+PASS o.f is 399
+PASS o.f is 400
+PASS o.f is 401
+PASS o.f is 402
+PASS o.f is 403
+PASS o.f is 404
+PASS o.f is 405
+PASS o.f is 406
+PASS o.f is 407
+PASS o.f is 408
+PASS o.f is 409
+PASS o.f is 410
+PASS o.f is 411
+PASS o.f is 412
+PASS o.f is 413
+PASS o.f is 414
+PASS o.f is 415
+PASS o.f is 416
+PASS o.f is 417
+PASS o.f is 418
+PASS o.f is 419
+PASS o.f is 420
+PASS o.f is 421
+PASS o.f is 422
+PASS o.f is 423
+PASS o.f is 424
+PASS o.f is 425
+PASS o.f is 426
+PASS o.f is 427
+PASS o.f is 428
+PASS o.f is 429
+PASS o.f is 430
+PASS o.f is 431
+PASS o.f is 432
+PASS o.f is 433
+PASS o.f is 434
+PASS o.f is 435
+PASS o.f is 436
+PASS o.f is 437
+PASS o.f is 438
+PASS o.f is 439
+PASS o.f is 440
+PASS o.f is 441
+PASS o.f is 442
+PASS o.f is 443
+PASS o.f is 444
+PASS o.f is 445
+PASS o.f is 446
+PASS o.f is 447
+PASS o.f is 448
+PASS o.f is 449
+PASS o.f is 450
+PASS o.f is 451
+PASS o.f is 452
+PASS o.f is 453
+PASS o.f is 454
+PASS o.f is 455
+PASS o.f is 456
+PASS o.f is 457
+PASS o.f is 458
+PASS o.f is 459
+PASS o.f is 460
+PASS o.f is 461
+PASS o.f is 462
+PASS o.f is 463
+PASS o.f is 464
+PASS o.f is 465
+PASS o.f is 466
+PASS o.f is 467
+PASS o.f is 468
+PASS o.f is 469
+PASS o.f is 470
+PASS o.f is 471
+PASS o.f is 472
+PASS o.f is 473
+PASS o.f is 474
+PASS o.f is 475
+PASS o.f is 476
+PASS o.f is 477
+PASS o.f is 478
+PASS o.f is 479
+PASS o.f is 480
+PASS o.f is 481
+PASS o.f is 482
+PASS o.f is 483
+PASS o.f is 484
+PASS o.f is 485
+PASS o.f is 486
+PASS o.f is 487
+PASS o.f is 488
+PASS o.f is 489
+PASS o.f is 490
+PASS o.f is 491
+PASS o.f is 492
+PASS o.f is 493
+PASS o.f is 494
+PASS o.f is 495
+PASS o.f is 496
+PASS o.f is 497
+PASS o.f is 498
+PASS o.f is 499
+PASS o.f is 500
+PASS o.f is 501
+PASS o.f is 502
+PASS o.f is 503
+PASS o.f is 504
+PASS o.f is 505
+PASS o.f is 506
+PASS o.f is 507
+PASS o.f is 508
+PASS o.f is 509
+PASS o.f is 510
+PASS o.f is 511
+PASS o.f is 512
+PASS o.f is 513
+PASS o.f is 514
+PASS o.f is 515
+PASS o.f is 516
+PASS o.f is 517
+PASS o.f is 518
+PASS o.f is 519
+PASS o.f is 520
+PASS o.f is 521
+PASS o.f is 522
+PASS o.f is 523
+PASS o.f is 524
+PASS o.f is 525
+PASS o.f is 526
+PASS o.f is 527
+PASS o.f is 528
+PASS o.f is 529
+PASS o.f is 530
+PASS o.f is 531
+PASS o.f is 532
+PASS o.f is 533
+PASS o.f is 534
+PASS o.f is 535
+PASS o.f is 536
+PASS o.f is 537
+PASS o.f is 538
+PASS o.f is 539
+PASS o.f is 540
+PASS o.f is 541
+PASS o.f is 542
+PASS o.f is 543
+PASS o.f is 544
+PASS o.f is 545
+PASS o.f is 546
+PASS o.f is 547
+PASS o.f is 548
+PASS o.f is 549
+PASS o.f is 550
+PASS o.f is 551
+PASS o.f is 552
+PASS o.f is 553
+PASS o.f is 554
+PASS o.f is 555
+PASS o.f is 556
+PASS o.f is 557
+PASS o.f is 558
+PASS o.f is 559
+PASS o.f is 560
+PASS o.f is 561
+PASS o.f is 562
+PASS o.f is 563
+PASS o.f is 564
+PASS o.f is 565
+PASS o.f is 566
+PASS o.f is 567
+PASS o.f is 568
+PASS o.f is 569
+PASS o.f is 570
+PASS o.f is 571
+PASS o.f is 572
+PASS o.f is 573
+PASS o.f is 574
+PASS o.f is 575
+PASS o.f is 576
+PASS o.f is 577
+PASS o.f is 578
+PASS o.f is 579
+PASS o.f is 580
+PASS o.f is 581
+PASS o.f is 582
+PASS o.f is 583
+PASS o.f is 584
+PASS o.f is 585
+PASS o.f is 586
+PASS o.f is 587
+PASS o.f is 588
+PASS o.f is 589
+PASS o.f is 590
+PASS o.f is 591
+PASS o.f is 592
+PASS o.f is 593
+PASS o.f is 594
+PASS o.f is 595
+PASS o.f is 596
+PASS o.f is 597
+PASS o.f is 598
+PASS o.f is 599
+PASS o.f is 600
+PASS o.f is 601
+PASS o.f is 602
+PASS o.f is 603
+PASS o.f is 604
+PASS o.f is 605
+PASS o.f is 606
+PASS o.f is 607
+PASS o.f is 608
+PASS o.f is 609
+PASS o.f is 610
+PASS o.f is 611
+PASS o.f is 612
+PASS o.f is 613
+PASS o.f is 614
+PASS o.f is 615
+PASS o.f is 616
+PASS o.f is 617
+PASS o.f is 618
+PASS o.f is 619
+PASS o.f is 620
+PASS o.f is 621
+PASS o.f is 622
+PASS o.f is 623
+PASS o.f is 624
+PASS o.f is 625
+PASS o.f is 626
+PASS o.f is 627
+PASS o.f is 628
+PASS o.f is 629
+PASS o.f is 630
+PASS o.f is 631
+PASS o.f is 632
+PASS o.f is 633
+PASS o.f is 634
+PASS o.f is 635
+PASS o.f is 636
+PASS o.f is 637
+PASS o.f is 638
+PASS o.f is 639
+PASS o.f is 640
+PASS o.f is 641
+PASS o.f is 642
+PASS o.f is 643
+PASS o.f is 644
+PASS o.f is 645
+PASS o.f is 646
+PASS o.f is 647
+PASS o.f is 648
+PASS o.f is 649
+PASS o.f is 650
+PASS o.f is 651
+PASS o.f is 652
+PASS o.f is 653
+PASS o.f is 654
+PASS o.f is 655
+PASS o.f is 656
+PASS o.f is 657
+PASS o.f is 658
+PASS o.f is 659
+PASS o.f is 660
+PASS o.f is 661
+PASS o.f is 662
+PASS o.f is 663
+PASS o.f is 664
+PASS o.f is 665
+PASS o.f is 666
+PASS o.f is 667
+PASS o.f is 668
+PASS o.f is 669
+PASS o.f is 670
+PASS o.f is 671
+PASS o.f is 672
+PASS o.f is 673
+PASS o.f is 674
+PASS o.f is 675
+PASS o.f is 676
+PASS o.f is 677
+PASS o.f is 678
+PASS o.f is 679
+PASS o.f is 680
+PASS o.f is 681
+PASS o.f is 682
+PASS o.f is 683
+PASS o.f is 684
+PASS o.f is 685
+PASS o.f is 686
+PASS o.f is 687
+PASS o.f is 688
+PASS o.f is 689
+PASS o.f is 690
+PASS o.f is 691
+PASS o.f is 692
+PASS o.f is 693
+PASS o.f is 694
+PASS o.f is 695
+PASS o.f is 696
+PASS o.f is 697
+PASS o.f is 698
+PASS o.f is 699
+PASS o.f is 700
+PASS o.f is 701
+PASS o.f is 702
+PASS o.f is 703
+PASS o.f is 704
+PASS o.f is 705
+PASS o.f is 706
+PASS o.f is 707
+PASS o.f is 708
+PASS o.f is 709
+PASS o.f is 710
+PASS o.f is 711
+PASS o.f is 712
+PASS o.f is 713
+PASS o.f is 714
+PASS o.f is 715
+PASS o.f is 716
+PASS o.f is 717
+PASS o.f is 718
+PASS o.f is 719
+PASS o.f is 720
+PASS o.f is 721
+PASS o.f is 722
+PASS o.f is 723
+PASS o.f is 724
+PASS o.f is 725
+PASS o.f is 726
+PASS o.f is 727
+PASS o.f is 728
+PASS o.f is 729
+PASS o.f is 730
+PASS o.f is 731
+PASS o.f is 732
+PASS o.f is 733
+PASS o.f is 734
+PASS o.f is 735
+PASS o.f is 736
+PASS o.f is 737
+PASS o.f is 738
+PASS o.f is 739
+PASS o.f is 740
+PASS o.f is 741
+PASS o.f is 742
+PASS o.f is 743
+PASS o.f is 744
+PASS o.f is 745
+PASS o.f is 746
+PASS o.f is 747
+PASS o.f is 748
+PASS o.f is 749
+PASS o.f is 750
+PASS o.f is 751
+PASS o.f is 752
+PASS o.f is 753
+PASS o.f is 754
+PASS o.f is 755
+PASS o.f is 756
+PASS o.f is 757
+PASS o.f is 758
+PASS o.f is 759
+PASS o.f is 760
+PASS o.f is 761
+PASS o.f is 762
+PASS o.f is 763
+PASS o.f is 764
+PASS o.f is 765
+PASS o.f is 766
+PASS o.f is 767
+PASS o.f is 768
+PASS o.f is 769
+PASS o.f is 770
+PASS o.f is 771
+PASS o.f is 772
+PASS o.f is 773
+PASS o.f is 774
+PASS o.f is 775
+PASS o.f is 776
+PASS o.f is 777
+PASS o.f is 778
+PASS o.f is 779
+PASS o.f is 780
+PASS o.f is 781
+PASS o.f is 782
+PASS o.f is 783
+PASS o.f is 784
+PASS o.f is 785
+PASS o.f is 786
+PASS o.f is 787
+PASS o.f is 788
+PASS o.f is 789
+PASS o.f is 790
+PASS o.f is 791
+PASS o.f is 792
+PASS o.f is 793
+PASS o.f is 794
+PASS o.f is 795
+PASS o.f is 796
+PASS o.f is 797
+PASS o.f is 798
+PASS o.f is 799
+PASS o.f is 800
+PASS o.f is 801
+PASS o.f is 802
+PASS o.f is 803
+PASS o.f is 804
+PASS o.f is 805
+PASS o.f is 806
+PASS o.f is 807
+PASS o.f is 808
+PASS o.f is 809
+PASS o.f is 810
+PASS o.f is 811
+PASS o.f is 812
+PASS o.f is 813
+PASS o.f is 814
+PASS o.f is 815
+PASS o.f is 816
+PASS o.f is 817
+PASS o.f is 818
+PASS o.f is 819
+PASS o.f is 820
+PASS o.f is 821
+PASS o.f is 822
+PASS o.f is 823
+PASS o.f is 824
+PASS o.f is 825
+PASS o.f is 826
+PASS o.f is 827
+PASS o.f is 828
+PASS o.f is 829
+PASS o.f is 830
+PASS o.f is 831
+PASS o.f is 832
+PASS o.f is 833
+PASS o.f is 834
+PASS o.f is 835
+PASS o.f is 836
+PASS o.f is 837
+PASS o.f is 838
+PASS o.f is 839
+PASS o.f is 840
+PASS o.f is 841
+PASS o.f is 842
+PASS o.f is 843
+PASS o.f is 844
+PASS o.f is 845
+PASS o.f is 846
+PASS o.f is 847
+PASS o.f is 848
+PASS o.f is 849
+PASS o.f is 850
+PASS o.f is 851
+PASS o.f is 852
+PASS o.f is 853
+PASS o.f is 854
+PASS o.f is 855
+PASS o.f is 856
+PASS o.f is 857
+PASS o.f is 858
+PASS o.f is 859
+PASS o.f is 860
+PASS o.f is 861
+PASS o.f is 862
+PASS o.f is 863
+PASS o.f is 864
+PASS o.f is 865
+PASS o.f is 866
+PASS o.f is 867
+PASS o.f is 868
+PASS o.f is 869
+PASS o.f is 870
+PASS o.f is 871
+PASS o.f is 872
+PASS o.f is 873
+PASS o.f is 874
+PASS o.f is 875
+PASS o.f is 876
+PASS o.f is 877
+PASS o.f is 878
+PASS o.f is 879
+PASS o.f is 880
+PASS o.f is 881
+PASS o.f is 882
+PASS o.f is 883
+PASS o.f is 884
+PASS o.f is 885
+PASS o.f is 886
+PASS o.f is 887
+PASS o.f is 888
+PASS o.f is 889
+PASS o.f is 890
+PASS o.f is 891
+PASS o.f is 892
+PASS o.f is 893
+PASS o.f is 894
+PASS o.f is 895
+PASS o.f is 896
+PASS o.f is 897
+PASS o.f is 898
+PASS o.f is 899
+PASS stuff is 900
+PASS o.f is undefined
+PASS stuff is 901
+PASS o.f is undefined
+PASS stuff is 902
+PASS o.f is undefined
+PASS stuff is 903
+PASS o.f is undefined
+PASS stuff is 904
+PASS o.f is undefined
+PASS stuff is 905
+PASS o.f is undefined
+PASS stuff is 906
+PASS o.f is undefined
+PASS stuff is 907
+PASS o.f is undefined
+PASS stuff is 908
+PASS o.f is undefined
+PASS stuff is 909
+PASS o.f is undefined
+PASS stuff is 910
+PASS o.f is undefined
+PASS stuff is 911
+PASS o.f is undefined
+PASS stuff is 912
+PASS o.f is undefined
+PASS stuff is 913
+PASS o.f is undefined
+PASS stuff is 914
+PASS o.f is undefined
+PASS stuff is 915
+PASS o.f is undefined
+PASS stuff is 916
+PASS o.f is undefined
+PASS stuff is 917
+PASS o.f is undefined
+PASS stuff is 918
+PASS o.f is undefined
+PASS stuff is 919
+PASS o.f is undefined
+PASS stuff is 920
+PASS o.f is undefined
+PASS stuff is 921
+PASS o.f is undefined
+PASS stuff is 922
+PASS o.f is undefined
+PASS stuff is 923
+PASS o.f is undefined
+PASS stuff is 924
+PASS o.f is undefined
+PASS stuff is 925
+PASS o.f is undefined
+PASS stuff is 926
+PASS o.f is undefined
+PASS stuff is 927
+PASS o.f is undefined
+PASS stuff is 928
+PASS o.f is undefined
+PASS stuff is 929
+PASS o.f is undefined
+PASS stuff is 930
+PASS o.f is undefined
+PASS stuff is 931
+PASS o.f is undefined
+PASS stuff is 932
+PASS o.f is undefined
+PASS stuff is 933
+PASS o.f is undefined
+PASS stuff is 934
+PASS o.f is undefined
+PASS stuff is 935
+PASS o.f is undefined
+PASS stuff is 936
+PASS o.f is undefined
+PASS stuff is 937
+PASS o.f is undefined
+PASS stuff is 938
+PASS o.f is undefined
+PASS stuff is 939
+PASS o.f is undefined
+PASS stuff is 940
+PASS o.f is undefined
+PASS stuff is 941
+PASS o.f is undefined
+PASS stuff is 942
+PASS o.f is undefined
+PASS stuff is 943
+PASS o.f is undefined
+PASS stuff is 944
+PASS o.f is undefined
+PASS stuff is 945
+PASS o.f is undefined
+PASS stuff is 946
+PASS o.f is undefined
+PASS stuff is 947
+PASS o.f is undefined
+PASS stuff is 948
+PASS o.f is undefined
+PASS stuff is 949
+PASS o.f is undefined
+PASS stuff is 950
+PASS o.f is undefined
+PASS stuff is 951
+PASS o.f is undefined
+PASS stuff is 952
+PASS o.f is undefined
+PASS stuff is 953
+PASS o.f is undefined
+PASS stuff is 954
+PASS o.f is undefined
+PASS stuff is 955
+PASS o.f is undefined
+PASS stuff is 956
+PASS o.f is undefined
+PASS stuff is 957
+PASS o.f is undefined
+PASS stuff is 958
+PASS o.f is undefined
+PASS stuff is 959
+PASS o.f is undefined
+PASS stuff is 960
+PASS o.f is undefined
+PASS stuff is 961
+PASS o.f is undefined
+PASS stuff is 962
+PASS o.f is undefined
+PASS stuff is 963
+PASS o.f is undefined
+PASS stuff is 964
+PASS o.f is undefined
+PASS stuff is 965
+PASS o.f is undefined
+PASS stuff is 966
+PASS o.f is undefined
+PASS stuff is 967
+PASS o.f is undefined
+PASS stuff is 968
+PASS o.f is undefined
+PASS stuff is 969
+PASS o.f is undefined
+PASS stuff is 970
+PASS o.f is undefined
+PASS stuff is 971
+PASS o.f is undefined
+PASS stuff is 972
+PASS o.f is undefined
+PASS stuff is 973
+PASS o.f is undefined
+PASS stuff is 974
+PASS o.f is undefined
+PASS stuff is 975
+PASS o.f is undefined
+PASS stuff is 976
+PASS o.f is undefined
+PASS stuff is 977
+PASS o.f is undefined
+PASS stuff is 978
+PASS o.f is undefined
+PASS stuff is 979
+PASS o.f is undefined
+PASS stuff is 980
+PASS o.f is undefined
+PASS stuff is 981
+PASS o.f is undefined
+PASS stuff is 982
+PASS o.f is undefined
+PASS stuff is 983
+PASS o.f is undefined
+PASS stuff is 984
+PASS o.f is undefined
+PASS stuff is 985
+PASS o.f is undefined
+PASS stuff is 986
+PASS o.f is undefined
+PASS stuff is 987
+PASS o.f is undefined
+PASS stuff is 988
+PASS o.f is undefined
+PASS stuff is 989
+PASS o.f is undefined
+PASS stuff is 990
+PASS o.f is undefined
+PASS stuff is 991
+PASS o.f is undefined
+PASS stuff is 992
+PASS o.f is undefined
+PASS stuff is 993
+PASS o.f is undefined
+PASS stuff is 994
+PASS o.f is undefined
+PASS stuff is 995
+PASS o.f is undefined
+PASS stuff is 996
+PASS o.f is undefined
+PASS stuff is 997
+PASS o.f is undefined
+PASS stuff is 998
+PASS o.f is undefined
+PASS stuff is 999
+PASS o.f is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-put-by-id-prototype-check.js b/test/webkit/dfg-put-by-id-prototype-check.js
new file mode 100644 (file)
index 0000000..a8b6137
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG CFA is not overzealous in removing prototype structure checks for put_by_id transitions."
+);
+
+function foo(a, b)
+{
+    a.f = b;
+}
+
+var Empty = "";
+
+function Foo() {
+}
+
+var stuff;
+
+for (var i = 0; i < 1000; ++i) {
+    if (i >= 900)
+        Foo.prototype.__defineSetter__("f", function(value) { stuff = value; });
+
+    var o = new Foo();
+    eval(Empty + "foo(o, i)");
+    if (i >= 900) {
+        shouldBe("stuff", "" + i);
+        shouldBe("o.f", "" + (void 0));
+    } else
+        shouldBe("o.f", "" + i);
+}
+
diff --git a/test/webkit/dfg-put-by-id-reallocate-storage-expected.txt b/test/webkit/dfg-put-by-id-reallocate-storage-expected.txt
new file mode 100644 (file)
index 0000000..85785bb
--- /dev/null
@@ -0,0 +1,2132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a DFG PutById that allocates, and then reallocates, property storage works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-put-by-id-reallocate-storage-polymorphic-expected.txt b/test/webkit/dfg-put-by-id-reallocate-storage-polymorphic-expected.txt
new file mode 100644 (file)
index 0000000..c1a07e6
--- /dev/null
@@ -0,0 +1,2282 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a polymorphic DFG PutById that allocates, and then reallocates, property storage works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is 42
+PASS o.a is 1
+PASS o.b is 2
+PASS o.c is 3
+PASS o.d is 4
+PASS o.e is 5
+PASS o.f is 6
+PASS o.g is 7
+PASS o.h is 8
+PASS o.i is 9
+PASS o.j is 10
+PASS o.k is 11
+PASS o.l is 12
+PASS o.m is 13
+PASS o.n is 14
+PASS o.foo is void 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-put-by-id-reallocate-storage-polymorphic.js b/test/webkit/dfg-put-by-id-reallocate-storage-polymorphic.js
new file mode 100644 (file)
index 0000000..c3fe0fd
--- /dev/null
@@ -0,0 +1,72 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a polymorphic DFG PutById that allocates, and then reallocates, property storage works."
+);
+
+function foo(o) {
+    o.a = 1;
+    o.b = 2;
+    o.c = 3;
+    o.d = 4;
+    o.e = 5;
+    o.f = 6;
+    o.g = 7;
+    o.h = 8;
+    o.i = 9;
+    o.j = 10;
+    o.k = 11;
+    o.l = 12;
+    o.m = 13;
+    o.n = 14;
+}
+
+for (var i = 0; i < 150; ++i) {
+    var o;
+    if (i % 2)
+        o = {};
+    else
+        o = {foo: 42};
+    foo(o);
+    shouldBe("o.a", "1");
+    shouldBe("o.b", "2");
+    shouldBe("o.c", "3");
+    shouldBe("o.d", "4");
+    shouldBe("o.e", "5");
+    shouldBe("o.f", "6");
+    shouldBe("o.g", "7");
+    shouldBe("o.h", "8");
+    shouldBe("o.i", "9");
+    shouldBe("o.j", "10");
+    shouldBe("o.k", "11");
+    shouldBe("o.l", "12");
+    shouldBe("o.m", "13");
+    shouldBe("o.n", "14");
+    if (!(i % 2))
+        shouldBe("o.foo", "42");
+    else
+        shouldBe("o.foo", "void 0");
+}
+
+
diff --git a/test/webkit/dfg-put-by-id-reallocate-storage.js b/test/webkit/dfg-put-by-id-reallocate-storage.js
new file mode 100644 (file)
index 0000000..e6c19ee
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a DFG PutById that allocates, and then reallocates, property storage works."
+);
+
+function foo() {
+    var o = {};
+    o.a = 1;
+    o.b = 2;
+    o.c = 3;
+    o.d = 4;
+    o.e = 5;
+    o.f = 6;
+    o.g = 7;
+    o.h = 8;
+    o.i = 9;
+    o.j = 10;
+    o.k = 11;
+    o.l = 12;
+    o.m = 13;
+    o.n = 14;
+    return o;
+}
+
+for (var i = 0; i < 150; ++i) {
+    var o = foo();
+    shouldBe("o.a", "1");
+    shouldBe("o.b", "2");
+    shouldBe("o.c", "3");
+    shouldBe("o.d", "4");
+    shouldBe("o.e", "5");
+    shouldBe("o.f", "6");
+    shouldBe("o.g", "7");
+    shouldBe("o.h", "8");
+    shouldBe("o.i", "9");
+    shouldBe("o.j", "10");
+    shouldBe("o.k", "11");
+    shouldBe("o.l", "12");
+    shouldBe("o.m", "13");
+    shouldBe("o.n", "14");
+}
+
+
diff --git a/test/webkit/dfg-put-by-val-setter-then-get-by-val-expected.txt b/test/webkit/dfg-put-by-val-setter-then-get-by-val-expected.txt
new file mode 100644 (file)
index 0000000..c886e88
--- /dev/null
@@ -0,0 +1,432 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a GetByVal that accesses a value that was PutByVal'd, but where the PutByVal invoked a setter, works correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array, -1, i) is 42
+PASS thingy is 0
+PASS foo(array, -1, i) is 42
+PASS thingy is 1
+PASS foo(array, -1, i) is 42
+PASS thingy is 2
+PASS foo(array, -1, i) is 42
+PASS thingy is 3
+PASS foo(array, -1, i) is 42
+PASS thingy is 4
+PASS foo(array, -1, i) is 42
+PASS thingy is 5
+PASS foo(array, -1, i) is 42
+PASS thingy is 6
+PASS foo(array, -1, i) is 42
+PASS thingy is 7
+PASS foo(array, -1, i) is 42
+PASS thingy is 8
+PASS foo(array, -1, i) is 42
+PASS thingy is 9
+PASS foo(array, -1, i) is 42
+PASS thingy is 10
+PASS foo(array, -1, i) is 42
+PASS thingy is 11
+PASS foo(array, -1, i) is 42
+PASS thingy is 12
+PASS foo(array, -1, i) is 42
+PASS thingy is 13
+PASS foo(array, -1, i) is 42
+PASS thingy is 14
+PASS foo(array, -1, i) is 42
+PASS thingy is 15
+PASS foo(array, -1, i) is 42
+PASS thingy is 16
+PASS foo(array, -1, i) is 42
+PASS thingy is 17
+PASS foo(array, -1, i) is 42
+PASS thingy is 18
+PASS foo(array, -1, i) is 42
+PASS thingy is 19
+PASS foo(array, -1, i) is 42
+PASS thingy is 20
+PASS foo(array, -1, i) is 42
+PASS thingy is 21
+PASS foo(array, -1, i) is 42
+PASS thingy is 22
+PASS foo(array, -1, i) is 42
+PASS thingy is 23
+PASS foo(array, -1, i) is 42
+PASS thingy is 24
+PASS foo(array, -1, i) is 42
+PASS thingy is 25
+PASS foo(array, -1, i) is 42
+PASS thingy is 26
+PASS foo(array, -1, i) is 42
+PASS thingy is 27
+PASS foo(array, -1, i) is 42
+PASS thingy is 28
+PASS foo(array, -1, i) is 42
+PASS thingy is 29
+PASS foo(array, -1, i) is 42
+PASS thingy is 30
+PASS foo(array, -1, i) is 42
+PASS thingy is 31
+PASS foo(array, -1, i) is 42
+PASS thingy is 32
+PASS foo(array, -1, i) is 42
+PASS thingy is 33
+PASS foo(array, -1, i) is 42
+PASS thingy is 34
+PASS foo(array, -1, i) is 42
+PASS thingy is 35
+PASS foo(array, -1, i) is 42
+PASS thingy is 36
+PASS foo(array, -1, i) is 42
+PASS thingy is 37
+PASS foo(array, -1, i) is 42
+PASS thingy is 38
+PASS foo(array, -1, i) is 42
+PASS thingy is 39
+PASS foo(array, -1, i) is 42
+PASS thingy is 40
+PASS foo(array, -1, i) is 42
+PASS thingy is 41
+PASS foo(array, -1, i) is 42
+PASS thingy is 42
+PASS foo(array, -1, i) is 42
+PASS thingy is 43
+PASS foo(array, -1, i) is 42
+PASS thingy is 44
+PASS foo(array, -1, i) is 42
+PASS thingy is 45
+PASS foo(array, -1, i) is 42
+PASS thingy is 46
+PASS foo(array, -1, i) is 42
+PASS thingy is 47
+PASS foo(array, -1, i) is 42
+PASS thingy is 48
+PASS foo(array, -1, i) is 42
+PASS thingy is 49
+PASS foo(array, -1, i) is 42
+PASS thingy is 50
+PASS foo(array, -1, i) is 42
+PASS thingy is 51
+PASS foo(array, -1, i) is 42
+PASS thingy is 52
+PASS foo(array, -1, i) is 42
+PASS thingy is 53
+PASS foo(array, -1, i) is 42
+PASS thingy is 54
+PASS foo(array, -1, i) is 42
+PASS thingy is 55
+PASS foo(array, -1, i) is 42
+PASS thingy is 56
+PASS foo(array, -1, i) is 42
+PASS thingy is 57
+PASS foo(array, -1, i) is 42
+PASS thingy is 58
+PASS foo(array, -1, i) is 42
+PASS thingy is 59
+PASS foo(array, -1, i) is 42
+PASS thingy is 60
+PASS foo(array, -1, i) is 42
+PASS thingy is 61
+PASS foo(array, -1, i) is 42
+PASS thingy is 62
+PASS foo(array, -1, i) is 42
+PASS thingy is 63
+PASS foo(array, -1, i) is 42
+PASS thingy is 64
+PASS foo(array, -1, i) is 42
+PASS thingy is 65
+PASS foo(array, -1, i) is 42
+PASS thingy is 66
+PASS foo(array, -1, i) is 42
+PASS thingy is 67
+PASS foo(array, -1, i) is 42
+PASS thingy is 68
+PASS foo(array, -1, i) is 42
+PASS thingy is 69
+PASS foo(array, -1, i) is 42
+PASS thingy is 70
+PASS foo(array, -1, i) is 42
+PASS thingy is 71
+PASS foo(array, -1, i) is 42
+PASS thingy is 72
+PASS foo(array, -1, i) is 42
+PASS thingy is 73
+PASS foo(array, -1, i) is 42
+PASS thingy is 74
+PASS foo(array, -1, i) is 42
+PASS thingy is 75
+PASS foo(array, -1, i) is 42
+PASS thingy is 76
+PASS foo(array, -1, i) is 42
+PASS thingy is 77
+PASS foo(array, -1, i) is 42
+PASS thingy is 78
+PASS foo(array, -1, i) is 42
+PASS thingy is 79
+PASS foo(array, -1, i) is 42
+PASS thingy is 80
+PASS foo(array, -1, i) is 42
+PASS thingy is 81
+PASS foo(array, -1, i) is 42
+PASS thingy is 82
+PASS foo(array, -1, i) is 42
+PASS thingy is 83
+PASS foo(array, -1, i) is 42
+PASS thingy is 84
+PASS foo(array, -1, i) is 42
+PASS thingy is 85
+PASS foo(array, -1, i) is 42
+PASS thingy is 86
+PASS foo(array, -1, i) is 42
+PASS thingy is 87
+PASS foo(array, -1, i) is 42
+PASS thingy is 88
+PASS foo(array, -1, i) is 42
+PASS thingy is 89
+PASS foo(array, -1, i) is 42
+PASS thingy is 90
+PASS foo(array, -1, i) is 42
+PASS thingy is 91
+PASS foo(array, -1, i) is 42
+PASS thingy is 92
+PASS foo(array, -1, i) is 42
+PASS thingy is 93
+PASS foo(array, -1, i) is 42
+PASS thingy is 94
+PASS foo(array, -1, i) is 42
+PASS thingy is 95
+PASS foo(array, -1, i) is 42
+PASS thingy is 96
+PASS foo(array, -1, i) is 42
+PASS thingy is 97
+PASS foo(array, -1, i) is 42
+PASS thingy is 98
+PASS foo(array, -1, i) is 42
+PASS thingy is 99
+PASS foo(array, -1, i) is 42
+PASS thingy is 100
+PASS foo(array, -1, i) is 42
+PASS thingy is 101
+PASS foo(array, -1, i) is 42
+PASS thingy is 102
+PASS foo(array, -1, i) is 42
+PASS thingy is 103
+PASS foo(array, -1, i) is 42
+PASS thingy is 104
+PASS foo(array, -1, i) is 42
+PASS thingy is 105
+PASS foo(array, -1, i) is 42
+PASS thingy is 106
+PASS foo(array, -1, i) is 42
+PASS thingy is 107
+PASS foo(array, -1, i) is 42
+PASS thingy is 108
+PASS foo(array, -1, i) is 42
+PASS thingy is 109
+PASS foo(array, -1, i) is 42
+PASS thingy is 110
+PASS foo(array, -1, i) is 42
+PASS thingy is 111
+PASS foo(array, -1, i) is 42
+PASS thingy is 112
+PASS foo(array, -1, i) is 42
+PASS thingy is 113
+PASS foo(array, -1, i) is 42
+PASS thingy is 114
+PASS foo(array, -1, i) is 42
+PASS thingy is 115
+PASS foo(array, -1, i) is 42
+PASS thingy is 116
+PASS foo(array, -1, i) is 42
+PASS thingy is 117
+PASS foo(array, -1, i) is 42
+PASS thingy is 118
+PASS foo(array, -1, i) is 42
+PASS thingy is 119
+PASS foo(array, -1, i) is 42
+PASS thingy is 120
+PASS foo(array, -1, i) is 42
+PASS thingy is 121
+PASS foo(array, -1, i) is 42
+PASS thingy is 122
+PASS foo(array, -1, i) is 42
+PASS thingy is 123
+PASS foo(array, -1, i) is 42
+PASS thingy is 124
+PASS foo(array, -1, i) is 42
+PASS thingy is 125
+PASS foo(array, -1, i) is 42
+PASS thingy is 126
+PASS foo(array, -1, i) is 42
+PASS thingy is 127
+PASS foo(array, -1, i) is 42
+PASS thingy is 128
+PASS foo(array, -1, i) is 42
+PASS thingy is 129
+PASS foo(array, -1, i) is 42
+PASS thingy is 130
+PASS foo(array, -1, i) is 42
+PASS thingy is 131
+PASS foo(array, -1, i) is 42
+PASS thingy is 132
+PASS foo(array, -1, i) is 42
+PASS thingy is 133
+PASS foo(array, -1, i) is 42
+PASS thingy is 134
+PASS foo(array, -1, i) is 42
+PASS thingy is 135
+PASS foo(array, -1, i) is 42
+PASS thingy is 136
+PASS foo(array, -1, i) is 42
+PASS thingy is 137
+PASS foo(array, -1, i) is 42
+PASS thingy is 138
+PASS foo(array, -1, i) is 42
+PASS thingy is 139
+PASS foo(array, -1, i) is 42
+PASS thingy is 140
+PASS foo(array, -1, i) is 42
+PASS thingy is 141
+PASS foo(array, -1, i) is 42
+PASS thingy is 142
+PASS foo(array, -1, i) is 42
+PASS thingy is 143
+PASS foo(array, -1, i) is 42
+PASS thingy is 144
+PASS foo(array, -1, i) is 42
+PASS thingy is 145
+PASS foo(array, -1, i) is 42
+PASS thingy is 146
+PASS foo(array, -1, i) is 42
+PASS thingy is 147
+PASS foo(array, -1, i) is 42
+PASS thingy is 148
+PASS foo(array, -1, i) is 42
+PASS thingy is 149
+PASS foo(array, -1, i) is 42
+PASS thingy is 150
+PASS foo(array, -1, i) is 42
+PASS thingy is 151
+PASS foo(array, -1, i) is 42
+PASS thingy is 152
+PASS foo(array, -1, i) is 42
+PASS thingy is 153
+PASS foo(array, -1, i) is 42
+PASS thingy is 154
+PASS foo(array, -1, i) is 42
+PASS thingy is 155
+PASS foo(array, -1, i) is 42
+PASS thingy is 156
+PASS foo(array, -1, i) is 42
+PASS thingy is 157
+PASS foo(array, -1, i) is 42
+PASS thingy is 158
+PASS foo(array, -1, i) is 42
+PASS thingy is 159
+PASS foo(array, -1, i) is 42
+PASS thingy is 160
+PASS foo(array, -1, i) is 42
+PASS thingy is 161
+PASS foo(array, -1, i) is 42
+PASS thingy is 162
+PASS foo(array, -1, i) is 42
+PASS thingy is 163
+PASS foo(array, -1, i) is 42
+PASS thingy is 164
+PASS foo(array, -1, i) is 42
+PASS thingy is 165
+PASS foo(array, -1, i) is 42
+PASS thingy is 166
+PASS foo(array, -1, i) is 42
+PASS thingy is 167
+PASS foo(array, -1, i) is 42
+PASS thingy is 168
+PASS foo(array, -1, i) is 42
+PASS thingy is 169
+PASS foo(array, -1, i) is 42
+PASS thingy is 170
+PASS foo(array, -1, i) is 42
+PASS thingy is 171
+PASS foo(array, -1, i) is 42
+PASS thingy is 172
+PASS foo(array, -1, i) is 42
+PASS thingy is 173
+PASS foo(array, -1, i) is 42
+PASS thingy is 174
+PASS foo(array, -1, i) is 42
+PASS thingy is 175
+PASS foo(array, -1, i) is 42
+PASS thingy is 176
+PASS foo(array, -1, i) is 42
+PASS thingy is 177
+PASS foo(array, -1, i) is 42
+PASS thingy is 178
+PASS foo(array, -1, i) is 42
+PASS thingy is 179
+PASS foo(array, -1, i) is 42
+PASS thingy is 180
+PASS foo(array, -1, i) is 42
+PASS thingy is 181
+PASS foo(array, -1, i) is 42
+PASS thingy is 182
+PASS foo(array, -1, i) is 42
+PASS thingy is 183
+PASS foo(array, -1, i) is 42
+PASS thingy is 184
+PASS foo(array, -1, i) is 42
+PASS thingy is 185
+PASS foo(array, -1, i) is 42
+PASS thingy is 186
+PASS foo(array, -1, i) is 42
+PASS thingy is 187
+PASS foo(array, -1, i) is 42
+PASS thingy is 188
+PASS foo(array, -1, i) is 42
+PASS thingy is 189
+PASS foo(array, -1, i) is 42
+PASS thingy is 190
+PASS foo(array, -1, i) is 42
+PASS thingy is 191
+PASS foo(array, -1, i) is 42
+PASS thingy is 192
+PASS foo(array, -1, i) is 42
+PASS thingy is 193
+PASS foo(array, -1, i) is 42
+PASS thingy is 194
+PASS foo(array, -1, i) is 42
+PASS thingy is 195
+PASS foo(array, -1, i) is 42
+PASS thingy is 196
+PASS foo(array, -1, i) is 42
+PASS thingy is 197
+PASS foo(array, -1, i) is 42
+PASS thingy is 198
+PASS foo(array, -1, i) is 42
+PASS thingy is 199
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-put-by-val-setter-then-get-by-val.js b/test/webkit/dfg-put-by-val-setter-then-get-by-val.js
new file mode 100644 (file)
index 0000000..40d79e0
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a GetByVal that accesses a value that was PutByVal'd, but where the PutByVal invoked a setter, works correctly."
+);
+
+function foo(a, i, v) {
+    a[i] = v;
+    return a[i];
+}
+
+var array = [];
+var thingy;
+array.__defineSetter__(
+    "-1", function(x) { thingy = x; }
+);
+array.__defineGetter__(
+    "-1", function() { return 42; }
+);
+
+for (var i = 0; i < 200; ++i) {
+    shouldBe("foo(array, -1, i)", "42");
+    shouldBe("thingy", "" + i);
+}
+
diff --git a/test/webkit/dfg-put-scoped-var-backward-flow-expected.txt b/test/webkit/dfg-put-scoped-var-backward-flow-expected.txt
new file mode 100644 (file)
index 0000000..8d68fa8
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG treats the operand to PutScopedVar as escaping in an unconstrained way.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS sum([2147483646, 2147483644]) is 4294967290
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-put-scoped-var-backward-flow.js b/test/webkit/dfg-put-scoped-var-backward-flow.js
new file mode 100644 (file)
index 0000000..9f3bfd3
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG treats the operand to PutScopedVar as escaping in an unconstrained way."
+);
+
+function sum(nums) {
+    var total = 0;
+    nums.forEach(function (num) {
+        total += num;
+    });
+    return total;
+}
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("sum([2147483646, 2147483644])", "4294967290");
+
diff --git a/test/webkit/dfg-putbyval-cfa-clobber-expected.txt b/test/webkit/dfg-putbyval-cfa-clobber-expected.txt
new file mode 100644 (file)
index 0000000..ba91932
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that CFA knows that PutByVal can clobber the world.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS foo(array, -1) is 57
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-putbyval-cfa-clobber.js b/test/webkit/dfg-putbyval-cfa-clobber.js
new file mode 100644 (file)
index 0000000..423a171
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that CFA knows that PutByVal can clobber the world."
+);
+
+var theBar;
+
+function foo(a, b) {
+    var x;
+    function bar() {
+        x = 57;
+    }
+    theBar = bar;
+    x = 42;
+    a[b] = 73;
+    return x;
+}
+
+array = [];
+array.__defineSetter__("-1", function(v) { theBar(); });
+
+for (var i = 0; i < 200; ++i)
+    shouldBe("foo(array, -1)", "57");
diff --git a/test/webkit/dfg-redundant-load-of-captured-variable-proven-constant-expected.txt b/test/webkit/dfg-redundant-load-of-captured-variable-proven-constant-expected.txt
new file mode 100644 (file)
index 0000000..940ccee
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a redundant load of a captured variable that was proven to be a constant doesn't crash the compiler.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS "" + foo(o, i % 2) is "function () { return 32; },function () { return 32; }"
+PASS "" + foo(o, i % 2) is "function () { return x; }"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-redundant-load-of-captured-variable-proven-constant.js b/test/webkit/dfg-redundant-load-of-captured-variable-proven-constant.js
new file mode 100644 (file)
index 0000000..c97b9ed
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a redundant load of a captured variable that was proven to be a constant doesn't crash the compiler."
+);
+
+function foo(o, p) {
+    var x = o.f;
+    if (p)
+        return function() { return x; }
+    else {
+        var a = x;
+        var b = x;
+        return [a, b];
+    }
+}
+
+var o = {f:function() { return 32; }};
+
+for (var i = 0; i < 100; ++i) {
+    var expected;
+    if (i % 2)
+        expected = "\"function () { return x; }\"";
+    else
+        expected = "\"function () { return 32; },function () { return 32; }\"";
+    shouldBe("\"\" + foo(o, i % 2)", expected);
+}
diff --git a/test/webkit/dfg-resolve-global-polymorphic-non-dictionary-expected.txt b/test/webkit/dfg-resolve-global-polymorphic-non-dictionary-expected.txt
new file mode 100644 (file)
index 0000000..1c61fda
--- /dev/null
@@ -0,0 +1,2032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG's support for ResolveGlobal works when the structure is not a dictionary but the resolve has gone polymorphic.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS foo() is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-resolve-global-polymorphic-non-dictionary.js b/test/webkit/dfg-resolve-global-polymorphic-non-dictionary.js
new file mode 100644 (file)
index 0000000..c6d97ff
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG's support for ResolveGlobal works when the structure is not a dictionary but the resolve has gone polymorphic."
+)
+
+function foo() {
+    return x;
+}
+
+x = 42;
+
+for (var i = 0; i < 1000; ++i) {
+    eval("i" + i + " = function() { }; i" + i + ".prototype = this; (function(){ var o = new i" + i + "(); var result = 0; for (var j = 0; j < 100; ++j) result += o.x; return result; })()");
+    for (var j = 0; j < 2; ++j)
+        shouldBe("foo()", "42");
+}
diff --git a/test/webkit/dfg-resolve-global-specific-dictionary-expected.txt b/test/webkit/dfg-resolve-global-specific-dictionary-expected.txt
new file mode 100644 (file)
index 0000000..a3d34ed
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the specific value optimization does not break when the relevant structure is a dictionary.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "function () { }"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS "" + foo() is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-resolve-global-specific-dictionary.js b/test/webkit/dfg-resolve-global-specific-dictionary.js
new file mode 100644 (file)
index 0000000..97c28b8
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the specific value optimization does not break when the relevant structure is a dictionary."
+)
+
+function foo() {
+    return x;
+}
+
+x = function() { };
+
+var expected = "\"function () { }\"";
+
+for (var i = 0; i < 1000; ++i) {
+    eval("i" + i + " = " + i);
+    if (i == 200) {
+        x = 42;
+        expected = "\"42\"";
+    }
+    shouldBe("\"\" + foo()", expected);
+}
diff --git a/test/webkit/dfg-rshift-by-zero-eliminate-valuetoint32-expected.txt b/test/webkit/dfg-rshift-by-zero-eliminate-valuetoint32-expected.txt
new file mode 100644 (file)
index 0000000..a485f1b
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that right shifting by zero and then doing other bitops doesn't eliminate the ValueToInt32 node.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS f() is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-rshift-by-zero-eliminate-valuetoint32.js b/test/webkit/dfg-rshift-by-zero-eliminate-valuetoint32.js
new file mode 100644 (file)
index 0000000..715dfa3
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that right shifting by zero and then doing other bitops doesn't eliminate the ValueToInt32 node."
+);
+
+global = 32;
+
+function f() {
+    var Ha, fa;
+    Ha = global >> 0;
+    fa = Ha & 2;
+    global = Ha & 2;
+}
+
+for (var i = 0; i < 1000; ++i)
+    shouldBe("f()", "undefined");
diff --git a/test/webkit/dfg-side-effect-assignment-osr-exit-expected.txt b/test/webkit/dfg-side-effect-assignment-osr-exit-expected.txt
new file mode 100644 (file)
index 0000000..3fe919d
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens if we OSR exit on an assignment that was part of a side-effecting bytecode instruction.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(bar) is 42
+PASS count is 1
+PASS foo(bar) is 42
+PASS count is 2
+PASS foo(bar) is 42
+PASS count is 3
+PASS foo(bar) is 42
+PASS count is 4
+PASS foo(bar) is 42
+PASS count is 5
+PASS foo(bar) is 42
+PASS count is 6
+PASS foo(bar) is 42
+PASS count is 7
+PASS foo(bar) is 42
+PASS count is 8
+PASS foo(bar) is 42
+PASS count is 9
+PASS foo(bar) is 42
+PASS count is 10
+PASS foo(bar) is 42
+PASS count is 11
+PASS foo(bar) is 42
+PASS count is 12
+PASS foo(bar) is 42
+PASS count is 13
+PASS foo(bar) is 42
+PASS count is 14
+PASS foo(bar) is 42
+PASS count is 15
+PASS foo(bar) is 42
+PASS count is 16
+PASS foo(bar) is 42
+PASS count is 17
+PASS foo(bar) is 42
+PASS count is 18
+PASS foo(bar) is 42
+PASS count is 19
+PASS foo(bar) is 42
+PASS count is 20
+PASS foo(bar) is 42
+PASS count is 21
+PASS foo(bar) is 42
+PASS count is 22
+PASS foo(bar) is 42
+PASS count is 23
+PASS foo(bar) is 42
+PASS count is 24
+PASS foo(bar) is 42
+PASS count is 25
+PASS foo(bar) is 42
+PASS count is 26
+PASS foo(bar) is 42
+PASS count is 27
+PASS foo(bar) is 42
+PASS count is 28
+PASS foo(bar) is 42
+PASS count is 29
+PASS foo(bar) is 42
+PASS count is 30
+PASS foo(bar) is 42
+PASS count is 31
+PASS foo(bar) is 42
+PASS count is 32
+PASS foo(bar) is 42
+PASS count is 33
+PASS foo(bar) is 42
+PASS count is 34
+PASS foo(bar) is 42
+PASS count is 35
+PASS foo(bar) is 42
+PASS count is 36
+PASS foo(bar) is 42
+PASS count is 37
+PASS foo(bar) is 42
+PASS count is 38
+PASS foo(bar) is 42
+PASS count is 39
+PASS foo(bar) is 42
+PASS count is 40
+PASS foo(bar) is 42
+PASS count is 41
+PASS foo(bar) is 42
+PASS count is 42
+PASS foo(bar) is 42
+PASS count is 43
+PASS foo(bar) is 42
+PASS count is 44
+PASS foo(bar) is 42
+PASS count is 45
+PASS foo(bar) is 42
+PASS count is 46
+PASS foo(bar) is 42
+PASS count is 47
+PASS foo(bar) is 42
+PASS count is 48
+PASS foo(bar) is 42
+PASS count is 49
+PASS foo(bar) is 42
+PASS count is 50
+PASS foo(bar) is 42
+PASS count is 51
+PASS foo(bar) is 42
+PASS count is 52
+PASS foo(bar) is 42
+PASS count is 53
+PASS foo(bar) is 42
+PASS count is 54
+PASS foo(bar) is 42
+PASS count is 55
+PASS foo(bar) is 42
+PASS count is 56
+PASS foo(bar) is 42
+PASS count is 57
+PASS foo(bar) is 42
+PASS count is 58
+PASS foo(bar) is 42
+PASS count is 59
+PASS foo(bar) is 42
+PASS count is 60
+PASS foo(bar) is 42
+PASS count is 61
+PASS foo(bar) is 42
+PASS count is 62
+PASS foo(bar) is 42
+PASS count is 63
+PASS foo(bar) is 42
+PASS count is 64
+PASS foo(bar) is 42
+PASS count is 65
+PASS foo(bar) is 42
+PASS count is 66
+PASS foo(bar) is 42
+PASS count is 67
+PASS foo(bar) is 42
+PASS count is 68
+PASS foo(bar) is 42
+PASS count is 69
+PASS foo(bar) is 42
+PASS count is 70
+PASS foo(bar) is 42
+PASS count is 71
+PASS foo(bar) is 42
+PASS count is 72
+PASS foo(bar) is 42
+PASS count is 73
+PASS foo(bar) is 42
+PASS count is 74
+PASS foo(bar) is 42
+PASS count is 75
+PASS foo(bar) is 42
+PASS count is 76
+PASS foo(bar) is 42
+PASS count is 77
+PASS foo(bar) is 42
+PASS count is 78
+PASS foo(bar) is 42
+PASS count is 79
+PASS foo(bar) is 42
+PASS count is 80
+PASS foo(bar) is 42
+PASS count is 81
+PASS foo(bar) is 42
+PASS count is 82
+PASS foo(bar) is 42
+PASS count is 83
+PASS foo(bar) is 42
+PASS count is 84
+PASS foo(bar) is 42
+PASS count is 85
+PASS foo(bar) is 42
+PASS count is 86
+PASS foo(bar) is 42
+PASS count is 87
+PASS foo(bar) is 42
+PASS count is 88
+PASS foo(bar) is 42
+PASS count is 89
+PASS foo(bar) is 42
+PASS count is 90
+PASS foo(bar) is 42
+PASS count is 91
+PASS foo(bar) is 42
+PASS count is 92
+PASS foo(bar) is 42
+PASS count is 93
+PASS foo(bar) is 42
+PASS count is 94
+PASS foo(bar) is 42
+PASS count is 95
+PASS foo(bar) is 42
+PASS count is 96
+PASS foo(bar) is 42
+PASS count is 97
+PASS foo(bar) is 42
+PASS count is 98
+PASS foo(bar) is 42
+PASS count is 99
+PASS foo(bar) is 42
+PASS count is 100
+PASS foo(bar) is 42
+PASS count is 101
+PASS foo(bar) is 42
+PASS count is 102
+PASS foo(bar) is 42
+PASS count is 103
+PASS foo(bar) is 42
+PASS count is 104
+PASS foo(bar) is 42
+PASS count is 105
+PASS foo(bar) is 42
+PASS count is 106
+PASS foo(bar) is 42
+PASS count is 107
+PASS foo(bar) is 42
+PASS count is 108
+PASS foo(bar) is 42
+PASS count is 109
+PASS foo(bar) is 42
+PASS count is 110
+PASS foo(bar) is 42
+PASS count is 111
+PASS foo(bar) is 42
+PASS count is 112
+PASS foo(bar) is 42
+PASS count is 113
+PASS foo(bar) is 42
+PASS count is 114
+PASS foo(bar) is 42
+PASS count is 115
+PASS foo(bar) is 42
+PASS count is 116
+PASS foo(bar) is 42
+PASS count is 117
+PASS foo(bar) is 42
+PASS count is 118
+PASS foo(bar) is 42
+PASS count is 119
+PASS foo(bar) is 42
+PASS count is 120
+PASS foo(bar) is 42
+PASS count is 121
+PASS foo(bar) is 42
+PASS count is 122
+PASS foo(bar) is 42
+PASS count is 123
+PASS foo(bar) is 42
+PASS count is 124
+PASS foo(bar) is 42
+PASS count is 125
+PASS foo(bar) is 42
+PASS count is 126
+PASS foo(bar) is 42
+PASS count is 127
+PASS foo(bar) is 42
+PASS count is 128
+PASS foo(bar) is 42
+PASS count is 129
+PASS foo(bar) is 42
+PASS count is 130
+PASS foo(bar) is 42
+PASS count is 131
+PASS foo(bar) is 42
+PASS count is 132
+PASS foo(bar) is 42
+PASS count is 133
+PASS foo(bar) is 42
+PASS count is 134
+PASS foo(bar) is 42
+PASS count is 135
+PASS foo(bar) is 42
+PASS count is 136
+PASS foo(bar) is 42
+PASS count is 137
+PASS foo(bar) is 42
+PASS count is 138
+PASS foo(bar) is 42
+PASS count is 139
+PASS foo(bar) is 42
+PASS count is 140
+PASS foo(bar) is 42
+PASS count is 141
+PASS foo(bar) is 42
+PASS count is 142
+PASS foo(bar) is 42
+PASS count is 143
+PASS foo(bar) is 42
+PASS count is 144
+PASS foo(bar) is 42
+PASS count is 145
+PASS foo(bar) is 42
+PASS count is 146
+PASS foo(bar) is 42
+PASS count is 147
+PASS foo(bar) is 42
+PASS count is 148
+PASS foo(bar) is 42
+PASS count is 149
+PASS foo(bar) is 42
+PASS count is 150
+PASS foo(bar) is 42
+PASS count is 151
+PASS foo(bar) is 42
+PASS count is 152
+PASS foo(bar) is 42
+PASS count is 153
+PASS foo(bar) is 42
+PASS count is 154
+PASS foo(bar) is 42
+PASS count is 155
+PASS foo(bar) is 42
+PASS count is 156
+PASS foo(bar) is 42
+PASS count is 157
+PASS foo(bar) is 42
+PASS count is 158
+PASS foo(bar) is 42
+PASS count is 159
+PASS foo(bar) is 42
+PASS count is 160
+PASS foo(bar) is 42
+PASS count is 161
+PASS foo(bar) is 42
+PASS count is 162
+PASS foo(bar) is 42
+PASS count is 163
+PASS foo(bar) is 42
+PASS count is 164
+PASS foo(bar) is 42
+PASS count is 165
+PASS foo(bar) is 42
+PASS count is 166
+PASS foo(bar) is 42
+PASS count is 167
+PASS foo(bar) is 42
+PASS count is 168
+PASS foo(bar) is 42
+PASS count is 169
+PASS foo(bar) is 42
+PASS count is 170
+PASS foo(bar) is 42
+PASS count is 171
+PASS foo(bar) is 42
+PASS count is 172
+PASS foo(bar) is 42
+PASS count is 173
+PASS foo(bar) is 42
+PASS count is 174
+PASS foo(bar) is 42
+PASS count is 175
+PASS foo(bar) is 42
+PASS count is 176
+PASS foo(bar) is 42
+PASS count is 177
+PASS foo(bar) is 42
+PASS count is 178
+PASS foo(bar) is 42
+PASS count is 179
+PASS foo(bar) is 42
+PASS count is 180
+PASS foo(bar) is 42
+PASS count is 181
+PASS foo(bar) is 42
+PASS count is 182
+PASS foo(bar) is 42
+PASS count is 183
+PASS foo(bar) is 42
+PASS count is 184
+PASS foo(bar) is 42
+PASS count is 185
+PASS foo(bar) is 42
+PASS count is 186
+PASS foo(bar) is 42
+PASS count is 187
+PASS foo(bar) is 42
+PASS count is 188
+PASS foo(bar) is 42
+PASS count is 189
+PASS foo(bar) is 42
+PASS count is 190
+PASS foo(bar) is 42
+PASS count is 191
+PASS foo(bar) is 42
+PASS count is 192
+PASS foo(bar) is 42
+PASS count is 193
+PASS foo(bar) is 42
+PASS count is 194
+PASS foo(bar) is 42
+PASS count is 195
+PASS foo(bar) is 42
+PASS count is 196
+PASS foo(bar) is 42
+PASS count is 197
+PASS foo(bar) is 42
+PASS count is 198
+PASS foo(bar) is 42
+PASS count is 199
+PASS foo(bar) is 42
+PASS count is 200
+PASS foo(bar) is 42
+PASS count is 201
+PASS foo(bar) is 42
+PASS count is 202
+PASS foo(bar) is 42
+PASS count is 203
+PASS foo(bar) is 42
+PASS count is 204
+PASS foo(bar) is 42
+PASS count is 205
+PASS foo(bar) is 42
+PASS count is 206
+PASS foo(bar) is 42
+PASS count is 207
+PASS foo(bar) is 42
+PASS count is 208
+PASS foo(bar) is 42
+PASS count is 209
+PASS foo(bar) is 42
+PASS count is 210
+PASS foo(bar) is 42
+PASS count is 211
+PASS foo(bar) is 42
+PASS count is 212
+PASS foo(bar) is 42
+PASS count is 213
+PASS foo(bar) is 42
+PASS count is 214
+PASS foo(bar) is 42
+PASS count is 215
+PASS foo(bar) is 42
+PASS count is 216
+PASS foo(bar) is 42
+PASS count is 217
+PASS foo(bar) is 42
+PASS count is 218
+PASS foo(bar) is 42
+PASS count is 219
+PASS foo(bar) is 42
+PASS count is 220
+PASS foo(bar) is 42
+PASS count is 221
+PASS foo(bar) is 42
+PASS count is 222
+PASS foo(bar) is 42
+PASS count is 223
+PASS foo(bar) is 42
+PASS count is 224
+PASS foo(bar) is 42
+PASS count is 225
+PASS foo(bar) is 42
+PASS count is 226
+PASS foo(bar) is 42
+PASS count is 227
+PASS foo(bar) is 42
+PASS count is 228
+PASS foo(bar) is 42
+PASS count is 229
+PASS foo(bar) is 42
+PASS count is 230
+PASS foo(bar) is 42
+PASS count is 231
+PASS foo(bar) is 42
+PASS count is 232
+PASS foo(bar) is 42
+PASS count is 233
+PASS foo(bar) is 42
+PASS count is 234
+PASS foo(bar) is 42
+PASS count is 235
+PASS foo(bar) is 42
+PASS count is 236
+PASS foo(bar) is 42
+PASS count is 237
+PASS foo(bar) is 42
+PASS count is 238
+PASS foo(bar) is 42
+PASS count is 239
+PASS foo(bar) is 42
+PASS count is 240
+PASS foo(bar) is 42
+PASS count is 241
+PASS foo(bar) is 42
+PASS count is 242
+PASS foo(bar) is 42
+PASS count is 243
+PASS foo(bar) is 42
+PASS count is 244
+PASS foo(bar) is 42
+PASS count is 245
+PASS foo(bar) is 42
+PASS count is 246
+PASS foo(bar) is 42
+PASS count is 247
+PASS foo(bar) is 42
+PASS count is 248
+PASS foo(bar) is 42
+PASS count is 249
+PASS foo(bar) is 42
+PASS count is 250
+PASS foo(bar) is 42
+PASS count is 251
+PASS foo(bar) is 42
+PASS count is 252
+PASS foo(bar) is 42
+PASS count is 253
+PASS foo(bar) is 42
+PASS count is 254
+PASS foo(bar) is 42
+PASS count is 255
+PASS foo(bar) is 42
+PASS count is 256
+PASS foo(bar) is 42
+PASS count is 257
+PASS foo(bar) is 42
+PASS count is 258
+PASS foo(bar) is 42
+PASS count is 259
+PASS foo(bar) is 42
+PASS count is 260
+PASS foo(bar) is 42
+PASS count is 261
+PASS foo(bar) is 42
+PASS count is 262
+PASS foo(bar) is 42
+PASS count is 263
+PASS foo(bar) is 42
+PASS count is 264
+PASS foo(bar) is 42
+PASS count is 265
+PASS foo(bar) is 42
+PASS count is 266
+PASS foo(bar) is 42
+PASS count is 267
+PASS foo(bar) is 42
+PASS count is 268
+PASS foo(bar) is 42
+PASS count is 269
+PASS foo(bar) is 42
+PASS count is 270
+PASS foo(bar) is 42
+PASS count is 271
+PASS foo(bar) is 42
+PASS count is 272
+PASS foo(bar) is 42
+PASS count is 273
+PASS foo(bar) is 42
+PASS count is 274
+PASS foo(bar) is 42
+PASS count is 275
+PASS foo(bar) is 42
+PASS count is 276
+PASS foo(bar) is 42
+PASS count is 277
+PASS foo(bar) is 42
+PASS count is 278
+PASS foo(bar) is 42
+PASS count is 279
+PASS foo(bar) is 42
+PASS count is 280
+PASS foo(bar) is 42
+PASS count is 281
+PASS foo(bar) is 42
+PASS count is 282
+PASS foo(bar) is 42
+PASS count is 283
+PASS foo(bar) is 42
+PASS count is 284
+PASS foo(bar) is 42
+PASS count is 285
+PASS foo(bar) is 42
+PASS count is 286
+PASS foo(bar) is 42
+PASS count is 287
+PASS foo(bar) is 42
+PASS count is 288
+PASS foo(bar) is 42
+PASS count is 289
+PASS foo(bar) is 42
+PASS count is 290
+PASS foo(bar) is 42
+PASS count is 291
+PASS foo(bar) is 42
+PASS count is 292
+PASS foo(bar) is 42
+PASS count is 293
+PASS foo(bar) is 42
+PASS count is 294
+PASS foo(bar) is 42
+PASS count is 295
+PASS foo(bar) is 42
+PASS count is 296
+PASS foo(bar) is 42
+PASS count is 297
+PASS foo(bar) is 42
+PASS count is 298
+PASS foo(bar) is 42
+PASS count is 299
+PASS foo(bar) is 42
+PASS count is 300
+PASS foo(bar) is 42
+PASS count is 301
+PASS foo(bar) is 42
+PASS count is 302
+PASS foo(bar) is 42
+PASS count is 303
+PASS foo(bar) is 42
+PASS count is 304
+PASS foo(bar) is 42
+PASS count is 305
+PASS foo(bar) is 42
+PASS count is 306
+PASS foo(bar) is 42
+PASS count is 307
+PASS foo(bar) is 42
+PASS count is 308
+PASS foo(bar) is 42
+PASS count is 309
+PASS foo(bar) is 42
+PASS count is 310
+PASS foo(bar) is 42
+PASS count is 311
+PASS foo(bar) is 42
+PASS count is 312
+PASS foo(bar) is 42
+PASS count is 313
+PASS foo(bar) is 42
+PASS count is 314
+PASS foo(bar) is 42
+PASS count is 315
+PASS foo(bar) is 42
+PASS count is 316
+PASS foo(bar) is 42
+PASS count is 317
+PASS foo(bar) is 42
+PASS count is 318
+PASS foo(bar) is 42
+PASS count is 319
+PASS foo(bar) is 42
+PASS count is 320
+PASS foo(bar) is 42
+PASS count is 321
+PASS foo(bar) is 42
+PASS count is 322
+PASS foo(bar) is 42
+PASS count is 323
+PASS foo(bar) is 42
+PASS count is 324
+PASS foo(bar) is 42
+PASS count is 325
+PASS foo(bar) is 42
+PASS count is 326
+PASS foo(bar) is 42
+PASS count is 327
+PASS foo(bar) is 42
+PASS count is 328
+PASS foo(bar) is 42
+PASS count is 329
+PASS foo(bar) is 42
+PASS count is 330
+PASS foo(bar) is 42
+PASS count is 331
+PASS foo(bar) is 42
+PASS count is 332
+PASS foo(bar) is 42
+PASS count is 333
+PASS foo(bar) is 42
+PASS count is 334
+PASS foo(bar) is 42
+PASS count is 335
+PASS foo(bar) is 42
+PASS count is 336
+PASS foo(bar) is 42
+PASS count is 337
+PASS foo(bar) is 42
+PASS count is 338
+PASS foo(bar) is 42
+PASS count is 339
+PASS foo(bar) is 42
+PASS count is 340
+PASS foo(bar) is 42
+PASS count is 341
+PASS foo(bar) is 42
+PASS count is 342
+PASS foo(bar) is 42
+PASS count is 343
+PASS foo(bar) is 42
+PASS count is 344
+PASS foo(bar) is 42
+PASS count is 345
+PASS foo(bar) is 42
+PASS count is 346
+PASS foo(bar) is 42
+PASS count is 347
+PASS foo(bar) is 42
+PASS count is 348
+PASS foo(bar) is 42
+PASS count is 349
+PASS foo(bar) is 42
+PASS count is 350
+PASS foo(bar) is 42
+PASS count is 351
+PASS foo(bar) is 42
+PASS count is 352
+PASS foo(bar) is 42
+PASS count is 353
+PASS foo(bar) is 42
+PASS count is 354
+PASS foo(bar) is 42
+PASS count is 355
+PASS foo(bar) is 42
+PASS count is 356
+PASS foo(bar) is 42
+PASS count is 357
+PASS foo(bar) is 42
+PASS count is 358
+PASS foo(bar) is 42
+PASS count is 359
+PASS foo(bar) is 42
+PASS count is 360
+PASS foo(bar) is 42
+PASS count is 361
+PASS foo(bar) is 42
+PASS count is 362
+PASS foo(bar) is 42
+PASS count is 363
+PASS foo(bar) is 42
+PASS count is 364
+PASS foo(bar) is 42
+PASS count is 365
+PASS foo(bar) is 42
+PASS count is 366
+PASS foo(bar) is 42
+PASS count is 367
+PASS foo(bar) is 42
+PASS count is 368
+PASS foo(bar) is 42
+PASS count is 369
+PASS foo(bar) is 42
+PASS count is 370
+PASS foo(bar) is 42
+PASS count is 371
+PASS foo(bar) is 42
+PASS count is 372
+PASS foo(bar) is 42
+PASS count is 373
+PASS foo(bar) is 42
+PASS count is 374
+PASS foo(bar) is 42
+PASS count is 375
+PASS foo(bar) is 42
+PASS count is 376
+PASS foo(bar) is 42
+PASS count is 377
+PASS foo(bar) is 42
+PASS count is 378
+PASS foo(bar) is 42
+PASS count is 379
+PASS foo(bar) is 42
+PASS count is 380
+PASS foo(bar) is 42
+PASS count is 381
+PASS foo(bar) is 42
+PASS count is 382
+PASS foo(bar) is 42
+PASS count is 383
+PASS foo(bar) is 42
+PASS count is 384
+PASS foo(bar) is 42
+PASS count is 385
+PASS foo(bar) is 42
+PASS count is 386
+PASS foo(bar) is 42
+PASS count is 387
+PASS foo(bar) is 42
+PASS count is 388
+PASS foo(bar) is 42
+PASS count is 389
+PASS foo(bar) is 42
+PASS count is 390
+PASS foo(bar) is 42
+PASS count is 391
+PASS foo(bar) is 42
+PASS count is 392
+PASS foo(bar) is 42
+PASS count is 393
+PASS foo(bar) is 42
+PASS count is 394
+PASS foo(bar) is 42
+PASS count is 395
+PASS foo(bar) is 42
+PASS count is 396
+PASS foo(bar) is 42
+PASS count is 397
+PASS foo(bar) is 42
+PASS count is 398
+PASS foo(bar) is 42
+PASS count is 399
+PASS foo(bar) is 42
+PASS count is 400
+PASS foo(bar) is 42
+PASS count is 401
+PASS foo(bar) is 42
+PASS count is 402
+PASS foo(bar) is 42
+PASS count is 403
+PASS foo(bar) is 42
+PASS count is 404
+PASS foo(bar) is 42
+PASS count is 405
+PASS foo(bar) is 42
+PASS count is 406
+PASS foo(bar) is 42
+PASS count is 407
+PASS foo(bar) is 42
+PASS count is 408
+PASS foo(bar) is 42
+PASS count is 409
+PASS foo(bar) is 42
+PASS count is 410
+PASS foo(bar) is 42
+PASS count is 411
+PASS foo(bar) is 42
+PASS count is 412
+PASS foo(bar) is 42
+PASS count is 413
+PASS foo(bar) is 42
+PASS count is 414
+PASS foo(bar) is 42
+PASS count is 415
+PASS foo(bar) is 42
+PASS count is 416
+PASS foo(bar) is 42
+PASS count is 417
+PASS foo(bar) is 42
+PASS count is 418
+PASS foo(bar) is 42
+PASS count is 419
+PASS foo(bar) is 42
+PASS count is 420
+PASS foo(bar) is 42
+PASS count is 421
+PASS foo(bar) is 42
+PASS count is 422
+PASS foo(bar) is 42
+PASS count is 423
+PASS foo(bar) is 42
+PASS count is 424
+PASS foo(bar) is 42
+PASS count is 425
+PASS foo(bar) is 42
+PASS count is 426
+PASS foo(bar) is 42
+PASS count is 427
+PASS foo(bar) is 42
+PASS count is 428
+PASS foo(bar) is 42
+PASS count is 429
+PASS foo(bar) is 42
+PASS count is 430
+PASS foo(bar) is 42
+PASS count is 431
+PASS foo(bar) is 42
+PASS count is 432
+PASS foo(bar) is 42
+PASS count is 433
+PASS foo(bar) is 42
+PASS count is 434
+PASS foo(bar) is 42
+PASS count is 435
+PASS foo(bar) is 42
+PASS count is 436
+PASS foo(bar) is 42
+PASS count is 437
+PASS foo(bar) is 42
+PASS count is 438
+PASS foo(bar) is 42
+PASS count is 439
+PASS foo(bar) is 42
+PASS count is 440
+PASS foo(bar) is 42
+PASS count is 441
+PASS foo(bar) is 42
+PASS count is 442
+PASS foo(bar) is 42
+PASS count is 443
+PASS foo(bar) is 42
+PASS count is 444
+PASS foo(bar) is 42
+PASS count is 445
+PASS foo(bar) is 42
+PASS count is 446
+PASS foo(bar) is 42
+PASS count is 447
+PASS foo(bar) is 42
+PASS count is 448
+PASS foo(bar) is 42
+PASS count is 449
+PASS foo(bar) is 42
+PASS count is 450
+PASS foo(bar) is "stuff"
+PASS count is 451
+PASS foo(bar) is "stuff"
+PASS count is 452
+PASS foo(bar) is "stuff"
+PASS count is 453
+PASS foo(bar) is "stuff"
+PASS count is 454
+PASS foo(bar) is "stuff"
+PASS count is 455
+PASS foo(bar) is "stuff"
+PASS count is 456
+PASS foo(bar) is "stuff"
+PASS count is 457
+PASS foo(bar) is "stuff"
+PASS count is 458
+PASS foo(bar) is "stuff"
+PASS count is 459
+PASS foo(bar) is "stuff"
+PASS count is 460
+PASS foo(bar) is "stuff"
+PASS count is 461
+PASS foo(bar) is "stuff"
+PASS count is 462
+PASS foo(bar) is "stuff"
+PASS count is 463
+PASS foo(bar) is "stuff"
+PASS count is 464
+PASS foo(bar) is "stuff"
+PASS count is 465
+PASS foo(bar) is "stuff"
+PASS count is 466
+PASS foo(bar) is "stuff"
+PASS count is 467
+PASS foo(bar) is "stuff"
+PASS count is 468
+PASS foo(bar) is "stuff"
+PASS count is 469
+PASS foo(bar) is "stuff"
+PASS count is 470
+PASS foo(bar) is "stuff"
+PASS count is 471
+PASS foo(bar) is "stuff"
+PASS count is 472
+PASS foo(bar) is "stuff"
+PASS count is 473
+PASS foo(bar) is "stuff"
+PASS count is 474
+PASS foo(bar) is "stuff"
+PASS count is 475
+PASS foo(bar) is "stuff"
+PASS count is 476
+PASS foo(bar) is "stuff"
+PASS count is 477
+PASS foo(bar) is "stuff"
+PASS count is 478
+PASS foo(bar) is "stuff"
+PASS count is 479
+PASS foo(bar) is "stuff"
+PASS count is 480
+PASS foo(bar) is "stuff"
+PASS count is 481
+PASS foo(bar) is "stuff"
+PASS count is 482
+PASS foo(bar) is "stuff"
+PASS count is 483
+PASS foo(bar) is "stuff"
+PASS count is 484
+PASS foo(bar) is "stuff"
+PASS count is 485
+PASS foo(bar) is "stuff"
+PASS count is 486
+PASS foo(bar) is "stuff"
+PASS count is 487
+PASS foo(bar) is "stuff"
+PASS count is 488
+PASS foo(bar) is "stuff"
+PASS count is 489
+PASS foo(bar) is "stuff"
+PASS count is 490
+PASS foo(bar) is "stuff"
+PASS count is 491
+PASS foo(bar) is "stuff"
+PASS count is 492
+PASS foo(bar) is "stuff"
+PASS count is 493
+PASS foo(bar) is "stuff"
+PASS count is 494
+PASS foo(bar) is "stuff"
+PASS count is 495
+PASS foo(bar) is "stuff"
+PASS count is 496
+PASS foo(bar) is "stuff"
+PASS count is 497
+PASS foo(bar) is "stuff"
+PASS count is 498
+PASS foo(bar) is "stuff"
+PASS count is 499
+PASS foo(bar) is "stuff"
+PASS count is 500
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-side-effect-assignment-osr-exit.js b/test/webkit/dfg-side-effect-assignment-osr-exit.js
new file mode 100644 (file)
index 0000000..696393f
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens if we OSR exit on an assignment that was part of a side-effecting bytecode instruction."
+);
+
+function foo(f) {
+    var x = f();
+    if (x)
+        return x;
+}
+
+var count = 0;
+function bar() {
+    count++;
+    return eval(baz);
+}
+
+var baz = "42";
+
+for (var i = 0; i < 500; ++i) {
+    if (i == 450)
+        baz = "\"stuff\"";
+    shouldBe("foo(bar)", baz);
+    shouldBe("count", "" + (i + 1));
+}
diff --git a/test/webkit/dfg-sqrt-backwards-propagation-expected.txt b/test/webkit/dfg-sqrt-backwards-propagation-expected.txt
new file mode 100644 (file)
index 0000000..7a219c0
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG knows that a function that appears like Math.sqrt could potentially use value in arbitrary ways, and not just in a context that converts values to numbers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(bar, [, 1.5], 0) is void 0
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS foo(Math.sqrt, [1.5], 0) is Math.sqrt(1.5)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-sqrt-backwards-propagation.js b/test/webkit/dfg-sqrt-backwards-propagation.js
new file mode 100644 (file)
index 0000000..9954e3a
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG knows that a function that appears like Math.sqrt could potentially use value in arbitrary ways, and not just in a context that converts values to numbers."
+);
+
+function foo(f, array, i) {
+    return f(array[i]);
+}
+
+function bar(value) {
+    return value;
+}
+
+for (var i = 0; i < 200; ++i) {
+    var f, array, expected;
+    if (i == 190) {
+        f = "bar";
+        array = "[, 1.5]";
+        expected = "void 0";
+    } else {
+        f = "Math.sqrt";
+        array = "[1.5]";
+        expected = "Math.sqrt(1.5)";
+    }
+    shouldBe("foo(" + f + ", " + array + ", 0)", expected);
+}
+
diff --git a/test/webkit/dfg-store-unexpected-value-into-argument-and-osr-exit-expected.txt b/test/webkit/dfg-store-unexpected-value-into-argument-and-osr-exit-expected.txt
new file mode 100644 (file)
index 0000000..fe8905d
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when you store an unexpected value into an argument (where the original argument value was the expected one) and then OSR exit.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 1
+PASS foo(3, {f:f, g:g}, p) is 85
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS foo(3, {f:f, g:g}, p) is 0.5
+PASS foo(3, {f:f, g:g}, p) is 85.5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-store-unexpected-value-into-argument-and-osr-exit.js b/test/webkit/dfg-store-unexpected-value-into-argument-and-osr-exit.js
new file mode 100644 (file)
index 0000000..1006c28
--- /dev/null
@@ -0,0 +1,64 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when you store an unexpected value into an argument (where the original argument value was the expected one) and then OSR exit."
+);
+
+function foo(x, o, p) {
+    x = o.f;
+    if (p) {
+        var result = o.g + x;
+        x = true; // Force x to not have a hoisted integer speculation.
+        return result;
+    } else
+        return o.g - x;
+}
+
+for (var i = 0; i < 200; ++i) {
+    var expected;
+    var p, f, g;
+    if (i < 150) {
+        f = 42;
+        g = 43;
+        if (i%2) {
+            p = true;
+            expected = 85;
+        } else {
+            p = false;
+            expected = 1;
+        }
+    } else {
+        f = 42.5;
+        g = 43;
+        if (i%2) {
+            p = true;
+            expected = 85.5;
+        } else {
+            p = false;
+            expected = 0.5;
+        }
+    }
+    shouldBe("foo(3, {f:f, g:g}, p)", "" + expected);
+}
+
diff --git a/test/webkit/dfg-string-stricteq-expected.txt b/test/webkit/dfg-string-stricteq-expected.txt
new file mode 100644 (file)
index 0000000..cc6a86f
--- /dev/null
@@ -0,0 +1,2032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG does the right thing on strict equality for known strings.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo({f:"blah0"}, {f:"blah1000"}) is [13, false]
+PASS bar({f:"blah0"}, {f:"blah1000"}) is 12
+PASS foo({f:"blah1"}, {f:"blah999"}) is [12, false]
+PASS bar({f:"blah1"}, {f:"blah999"}) is 11
+PASS foo({f:"blah2"}, {f:"blah998"}) is [12, false]
+PASS bar({f:"blah2"}, {f:"blah998"}) is 11
+PASS foo({f:"blah3"}, {f:"blah997"}) is [12, false]
+PASS bar({f:"blah3"}, {f:"blah997"}) is 11
+PASS foo({f:"blah4"}, {f:"blah996"}) is [12, false]
+PASS bar({f:"blah4"}, {f:"blah996"}) is 11
+PASS foo({f:"blah5"}, {f:"blah995"}) is [12, false]
+PASS bar({f:"blah5"}, {f:"blah995"}) is 11
+PASS foo({f:"blah6"}, {f:"blah994"}) is [12, false]
+PASS bar({f:"blah6"}, {f:"blah994"}) is 11
+PASS foo({f:"blah7"}, {f:"blah993"}) is [12, false]
+PASS bar({f:"blah7"}, {f:"blah993"}) is 11
+PASS foo({f:"blah8"}, {f:"blah992"}) is [12, false]
+PASS bar({f:"blah8"}, {f:"blah992"}) is 11
+PASS foo({f:"blah9"}, {f:"blah991"}) is [12, false]
+PASS bar({f:"blah9"}, {f:"blah991"}) is 11
+PASS foo({f:"blah10"}, {f:"blah990"}) is [13, false]
+PASS bar({f:"blah10"}, {f:"blah990"}) is 12
+PASS foo({f:"blah11"}, {f:"blah989"}) is [13, false]
+PASS bar({f:"blah11"}, {f:"blah989"}) is 12
+PASS foo({f:"blah12"}, {f:"blah988"}) is [13, false]
+PASS bar({f:"blah12"}, {f:"blah988"}) is 12
+PASS foo({f:"blah13"}, {f:"blah987"}) is [13, false]
+PASS bar({f:"blah13"}, {f:"blah987"}) is 12
+PASS foo({f:"blah14"}, {f:"blah986"}) is [13, false]
+PASS bar({f:"blah14"}, {f:"blah986"}) is 12
+PASS foo({f:"blah15"}, {f:"blah985"}) is [13, false]
+PASS bar({f:"blah15"}, {f:"blah985"}) is 12
+PASS foo({f:"blah16"}, {f:"blah984"}) is [13, false]
+PASS bar({f:"blah16"}, {f:"blah984"}) is 12
+PASS foo({f:"blah17"}, {f:"blah983"}) is [13, false]
+PASS bar({f:"blah17"}, {f:"blah983"}) is 12
+PASS foo({f:"blah18"}, {f:"blah982"}) is [13, false]
+PASS bar({f:"blah18"}, {f:"blah982"}) is 12
+PASS foo({f:"blah19"}, {f:"blah981"}) is [13, false]
+PASS bar({f:"blah19"}, {f:"blah981"}) is 12
+PASS foo({f:"blah20"}, {f:"blah980"}) is [13, false]
+PASS bar({f:"blah20"}, {f:"blah980"}) is 12
+PASS foo({f:"blah21"}, {f:"blah979"}) is [13, false]
+PASS bar({f:"blah21"}, {f:"blah979"}) is 12
+PASS foo({f:"blah22"}, {f:"blah978"}) is [13, false]
+PASS bar({f:"blah22"}, {f:"blah978"}) is 12
+PASS foo({f:"blah23"}, {f:"blah977"}) is [13, false]
+PASS bar({f:"blah23"}, {f:"blah977"}) is 12
+PASS foo({f:"blah24"}, {f:"blah976"}) is [13, false]
+PASS bar({f:"blah24"}, {f:"blah976"}) is 12
+PASS foo({f:"blah25"}, {f:"blah975"}) is [13, false]
+PASS bar({f:"blah25"}, {f:"blah975"}) is 12
+PASS foo({f:"blah26"}, {f:"blah974"}) is [13, false]
+PASS bar({f:"blah26"}, {f:"blah974"}) is 12
+PASS foo({f:"blah27"}, {f:"blah973"}) is [13, false]
+PASS bar({f:"blah27"}, {f:"blah973"}) is 12
+PASS foo({f:"blah28"}, {f:"blah972"}) is [13, false]
+PASS bar({f:"blah28"}, {f:"blah972"}) is 12
+PASS foo({f:"blah29"}, {f:"blah971"}) is [13, false]
+PASS bar({f:"blah29"}, {f:"blah971"}) is 12
+PASS foo({f:"blah30"}, {f:"blah970"}) is [13, false]
+PASS bar({f:"blah30"}, {f:"blah970"}) is 12
+PASS foo({f:"blah31"}, {f:"blah969"}) is [13, false]
+PASS bar({f:"blah31"}, {f:"blah969"}) is 12
+PASS foo({f:"blah32"}, {f:"blah968"}) is [13, false]
+PASS bar({f:"blah32"}, {f:"blah968"}) is 12
+PASS foo({f:"blah33"}, {f:"blah967"}) is [13, false]
+PASS bar({f:"blah33"}, {f:"blah967"}) is 12
+PASS foo({f:"blah34"}, {f:"blah966"}) is [13, false]
+PASS bar({f:"blah34"}, {f:"blah966"}) is 12
+PASS foo({f:"blah35"}, {f:"blah965"}) is [13, false]
+PASS bar({f:"blah35"}, {f:"blah965"}) is 12
+PASS foo({f:"blah36"}, {f:"blah964"}) is [13, false]
+PASS bar({f:"blah36"}, {f:"blah964"}) is 12
+PASS foo({f:"blah37"}, {f:"blah963"}) is [13, false]
+PASS bar({f:"blah37"}, {f:"blah963"}) is 12
+PASS foo({f:"blah38"}, {f:"blah962"}) is [13, false]
+PASS bar({f:"blah38"}, {f:"blah962"}) is 12
+PASS foo({f:"blah39"}, {f:"blah961"}) is [13, false]
+PASS bar({f:"blah39"}, {f:"blah961"}) is 12
+PASS foo({f:"blah40"}, {f:"blah960"}) is [13, false]
+PASS bar({f:"blah40"}, {f:"blah960"}) is 12
+PASS foo({f:"blah41"}, {f:"blah959"}) is [13, false]
+PASS bar({f:"blah41"}, {f:"blah959"}) is 12
+PASS foo({f:"blah42"}, {f:"blah958"}) is [13, false]
+PASS bar({f:"blah42"}, {f:"blah958"}) is 12
+PASS foo({f:"blah43"}, {f:"blah957"}) is [13, false]
+PASS bar({f:"blah43"}, {f:"blah957"}) is 12
+PASS foo({f:"blah44"}, {f:"blah956"}) is [13, false]
+PASS bar({f:"blah44"}, {f:"blah956"}) is 12
+PASS foo({f:"blah45"}, {f:"blah955"}) is [13, false]
+PASS bar({f:"blah45"}, {f:"blah955"}) is 12
+PASS foo({f:"blah46"}, {f:"blah954"}) is [13, false]
+PASS bar({f:"blah46"}, {f:"blah954"}) is 12
+PASS foo({f:"blah47"}, {f:"blah953"}) is [13, false]
+PASS bar({f:"blah47"}, {f:"blah953"}) is 12
+PASS foo({f:"blah48"}, {f:"blah952"}) is [13, false]
+PASS bar({f:"blah48"}, {f:"blah952"}) is 12
+PASS foo({f:"blah49"}, {f:"blah951"}) is [13, false]
+PASS bar({f:"blah49"}, {f:"blah951"}) is 12
+PASS foo({f:"blah50"}, {f:"blah950"}) is [13, false]
+PASS bar({f:"blah50"}, {f:"blah950"}) is 12
+PASS foo({f:"blah51"}, {f:"blah949"}) is [13, false]
+PASS bar({f:"blah51"}, {f:"blah949"}) is 12
+PASS foo({f:"blah52"}, {f:"blah948"}) is [13, false]
+PASS bar({f:"blah52"}, {f:"blah948"}) is 12
+PASS foo({f:"blah53"}, {f:"blah947"}) is [13, false]
+PASS bar({f:"blah53"}, {f:"blah947"}) is 12
+PASS foo({f:"blah54"}, {f:"blah946"}) is [13, false]
+PASS bar({f:"blah54"}, {f:"blah946"}) is 12
+PASS foo({f:"blah55"}, {f:"blah945"}) is [13, false]
+PASS bar({f:"blah55"}, {f:"blah945"}) is 12
+PASS foo({f:"blah56"}, {f:"blah944"}) is [13, false]
+PASS bar({f:"blah56"}, {f:"blah944"}) is 12
+PASS foo({f:"blah57"}, {f:"blah943"}) is [13, false]
+PASS bar({f:"blah57"}, {f:"blah943"}) is 12
+PASS foo({f:"blah58"}, {f:"blah942"}) is [13, false]
+PASS bar({f:"blah58"}, {f:"blah942"}) is 12
+PASS foo({f:"blah59"}, {f:"blah941"}) is [13, false]
+PASS bar({f:"blah59"}, {f:"blah941"}) is 12
+PASS foo({f:"blah60"}, {f:"blah940"}) is [13, false]
+PASS bar({f:"blah60"}, {f:"blah940"}) is 12
+PASS foo({f:"blah61"}, {f:"blah939"}) is [13, false]
+PASS bar({f:"blah61"}, {f:"blah939"}) is 12
+PASS foo({f:"blah62"}, {f:"blah938"}) is [13, false]
+PASS bar({f:"blah62"}, {f:"blah938"}) is 12
+PASS foo({f:"blah63"}, {f:"blah937"}) is [13, false]
+PASS bar({f:"blah63"}, {f:"blah937"}) is 12
+PASS foo({f:"blah64"}, {f:"blah936"}) is [13, false]
+PASS bar({f:"blah64"}, {f:"blah936"}) is 12
+PASS foo({f:"blah65"}, {f:"blah935"}) is [13, false]
+PASS bar({f:"blah65"}, {f:"blah935"}) is 12
+PASS foo({f:"blah66"}, {f:"blah934"}) is [13, false]
+PASS bar({f:"blah66"}, {f:"blah934"}) is 12
+PASS foo({f:"blah67"}, {f:"blah933"}) is [13, false]
+PASS bar({f:"blah67"}, {f:"blah933"}) is 12
+PASS foo({f:"blah68"}, {f:"blah932"}) is [13, false]
+PASS bar({f:"blah68"}, {f:"blah932"}) is 12
+PASS foo({f:"blah69"}, {f:"blah931"}) is [13, false]
+PASS bar({f:"blah69"}, {f:"blah931"}) is 12
+PASS foo({f:"blah70"}, {f:"blah930"}) is [13, false]
+PASS bar({f:"blah70"}, {f:"blah930"}) is 12
+PASS foo({f:"blah71"}, {f:"blah929"}) is [13, false]
+PASS bar({f:"blah71"}, {f:"blah929"}) is 12
+PASS foo({f:"blah72"}, {f:"blah928"}) is [13, false]
+PASS bar({f:"blah72"}, {f:"blah928"}) is 12
+PASS foo({f:"blah73"}, {f:"blah927"}) is [13, false]
+PASS bar({f:"blah73"}, {f:"blah927"}) is 12
+PASS foo({f:"blah74"}, {f:"blah926"}) is [13, false]
+PASS bar({f:"blah74"}, {f:"blah926"}) is 12
+PASS foo({f:"blah75"}, {f:"blah925"}) is [13, false]
+PASS bar({f:"blah75"}, {f:"blah925"}) is 12
+PASS foo({f:"blah76"}, {f:"blah924"}) is [13, false]
+PASS bar({f:"blah76"}, {f:"blah924"}) is 12
+PASS foo({f:"blah77"}, {f:"blah923"}) is [13, false]
+PASS bar({f:"blah77"}, {f:"blah923"}) is 12
+PASS foo({f:"blah78"}, {f:"blah922"}) is [13, false]
+PASS bar({f:"blah78"}, {f:"blah922"}) is 12
+PASS foo({f:"blah79"}, {f:"blah921"}) is [13, false]
+PASS bar({f:"blah79"}, {f:"blah921"}) is 12
+PASS foo({f:"blah80"}, {f:"blah920"}) is [13, false]
+PASS bar({f:"blah80"}, {f:"blah920"}) is 12
+PASS foo({f:"blah81"}, {f:"blah919"}) is [13, false]
+PASS bar({f:"blah81"}, {f:"blah919"}) is 12
+PASS foo({f:"blah82"}, {f:"blah918"}) is [13, false]
+PASS bar({f:"blah82"}, {f:"blah918"}) is 12
+PASS foo({f:"blah83"}, {f:"blah917"}) is [13, false]
+PASS bar({f:"blah83"}, {f:"blah917"}) is 12
+PASS foo({f:"blah84"}, {f:"blah916"}) is [13, false]
+PASS bar({f:"blah84"}, {f:"blah916"}) is 12
+PASS foo({f:"blah85"}, {f:"blah915"}) is [13, false]
+PASS bar({f:"blah85"}, {f:"blah915"}) is 12
+PASS foo({f:"blah86"}, {f:"blah914"}) is [13, false]
+PASS bar({f:"blah86"}, {f:"blah914"}) is 12
+PASS foo({f:"blah87"}, {f:"blah913"}) is [13, false]
+PASS bar({f:"blah87"}, {f:"blah913"}) is 12
+PASS foo({f:"blah88"}, {f:"blah912"}) is [13, false]
+PASS bar({f:"blah88"}, {f:"blah912"}) is 12
+PASS foo({f:"blah89"}, {f:"blah911"}) is [13, false]
+PASS bar({f:"blah89"}, {f:"blah911"}) is 12
+PASS foo({f:"blah90"}, {f:"blah910"}) is [13, false]
+PASS bar({f:"blah90"}, {f:"blah910"}) is 12
+PASS foo({f:"blah91"}, {f:"blah909"}) is [13, false]
+PASS bar({f:"blah91"}, {f:"blah909"}) is 12
+PASS foo({f:"blah92"}, {f:"blah908"}) is [13, false]
+PASS bar({f:"blah92"}, {f:"blah908"}) is 12
+PASS foo({f:"blah93"}, {f:"blah907"}) is [13, false]
+PASS bar({f:"blah93"}, {f:"blah907"}) is 12
+PASS foo({f:"blah94"}, {f:"blah906"}) is [13, false]
+PASS bar({f:"blah94"}, {f:"blah906"}) is 12
+PASS foo({f:"blah95"}, {f:"blah905"}) is [13, false]
+PASS bar({f:"blah95"}, {f:"blah905"}) is 12
+PASS foo({f:"blah96"}, {f:"blah904"}) is [13, false]
+PASS bar({f:"blah96"}, {f:"blah904"}) is 12
+PASS foo({f:"blah97"}, {f:"blah903"}) is [13, false]
+PASS bar({f:"blah97"}, {f:"blah903"}) is 12
+PASS foo({f:"blah98"}, {f:"blah902"}) is [13, false]
+PASS bar({f:"blah98"}, {f:"blah902"}) is 12
+PASS foo({f:"blah99"}, {f:"blah901"}) is [13, false]
+PASS bar({f:"blah99"}, {f:"blah901"}) is 12
+PASS foo({f:"blah100"}, {f:"blah900"}) is [14, false]
+PASS bar({f:"blah100"}, {f:"blah900"}) is 13
+PASS foo({f:"blah101"}, {f:"blah899"}) is [14, false]
+PASS bar({f:"blah101"}, {f:"blah899"}) is 13
+PASS foo({f:"blah102"}, {f:"blah898"}) is [14, false]
+PASS bar({f:"blah102"}, {f:"blah898"}) is 13
+PASS foo({f:"blah103"}, {f:"blah897"}) is [14, false]
+PASS bar({f:"blah103"}, {f:"blah897"}) is 13
+PASS foo({f:"blah104"}, {f:"blah896"}) is [14, false]
+PASS bar({f:"blah104"}, {f:"blah896"}) is 13
+PASS foo({f:"blah105"}, {f:"blah895"}) is [14, false]
+PASS bar({f:"blah105"}, {f:"blah895"}) is 13
+PASS foo({f:"blah106"}, {f:"blah894"}) is [14, false]
+PASS bar({f:"blah106"}, {f:"blah894"}) is 13
+PASS foo({f:"blah107"}, {f:"blah893"}) is [14, false]
+PASS bar({f:"blah107"}, {f:"blah893"}) is 13
+PASS foo({f:"blah108"}, {f:"blah892"}) is [14, false]
+PASS bar({f:"blah108"}, {f:"blah892"}) is 13
+PASS foo({f:"blah109"}, {f:"blah891"}) is [14, false]
+PASS bar({f:"blah109"}, {f:"blah891"}) is 13
+PASS foo({f:"blah110"}, {f:"blah890"}) is [14, false]
+PASS bar({f:"blah110"}, {f:"blah890"}) is 13
+PASS foo({f:"blah111"}, {f:"blah889"}) is [14, false]
+PASS bar({f:"blah111"}, {f:"blah889"}) is 13
+PASS foo({f:"blah112"}, {f:"blah888"}) is [14, false]
+PASS bar({f:"blah112"}, {f:"blah888"}) is 13
+PASS foo({f:"blah113"}, {f:"blah887"}) is [14, false]
+PASS bar({f:"blah113"}, {f:"blah887"}) is 13
+PASS foo({f:"blah114"}, {f:"blah886"}) is [14, false]
+PASS bar({f:"blah114"}, {f:"blah886"}) is 13
+PASS foo({f:"blah115"}, {f:"blah885"}) is [14, false]
+PASS bar({f:"blah115"}, {f:"blah885"}) is 13
+PASS foo({f:"blah116"}, {f:"blah884"}) is [14, false]
+PASS bar({f:"blah116"}, {f:"blah884"}) is 13
+PASS foo({f:"blah117"}, {f:"blah883"}) is [14, false]
+PASS bar({f:"blah117"}, {f:"blah883"}) is 13
+PASS foo({f:"blah118"}, {f:"blah882"}) is [14, false]
+PASS bar({f:"blah118"}, {f:"blah882"}) is 13
+PASS foo({f:"blah119"}, {f:"blah881"}) is [14, false]
+PASS bar({f:"blah119"}, {f:"blah881"}) is 13
+PASS foo({f:"blah120"}, {f:"blah880"}) is [14, false]
+PASS bar({f:"blah120"}, {f:"blah880"}) is 13
+PASS foo({f:"blah121"}, {f:"blah879"}) is [14, false]
+PASS bar({f:"blah121"}, {f:"blah879"}) is 13
+PASS foo({f:"blah122"}, {f:"blah878"}) is [14, false]
+PASS bar({f:"blah122"}, {f:"blah878"}) is 13
+PASS foo({f:"blah123"}, {f:"blah877"}) is [14, false]
+PASS bar({f:"blah123"}, {f:"blah877"}) is 13
+PASS foo({f:"blah124"}, {f:"blah876"}) is [14, false]
+PASS bar({f:"blah124"}, {f:"blah876"}) is 13
+PASS foo({f:"blah125"}, {f:"blah875"}) is [14, false]
+PASS bar({f:"blah125"}, {f:"blah875"}) is 13
+PASS foo({f:"blah126"}, {f:"blah874"}) is [14, false]
+PASS bar({f:"blah126"}, {f:"blah874"}) is 13
+PASS foo({f:"blah127"}, {f:"blah873"}) is [14, false]
+PASS bar({f:"blah127"}, {f:"blah873"}) is 13
+PASS foo({f:"blah128"}, {f:"blah872"}) is [14, false]
+PASS bar({f:"blah128"}, {f:"blah872"}) is 13
+PASS foo({f:"blah129"}, {f:"blah871"}) is [14, false]
+PASS bar({f:"blah129"}, {f:"blah871"}) is 13
+PASS foo({f:"blah130"}, {f:"blah870"}) is [14, false]
+PASS bar({f:"blah130"}, {f:"blah870"}) is 13
+PASS foo({f:"blah131"}, {f:"blah869"}) is [14, false]
+PASS bar({f:"blah131"}, {f:"blah869"}) is 13
+PASS foo({f:"blah132"}, {f:"blah868"}) is [14, false]
+PASS bar({f:"blah132"}, {f:"blah868"}) is 13
+PASS foo({f:"blah133"}, {f:"blah867"}) is [14, false]
+PASS bar({f:"blah133"}, {f:"blah867"}) is 13
+PASS foo({f:"blah134"}, {f:"blah866"}) is [14, false]
+PASS bar({f:"blah134"}, {f:"blah866"}) is 13
+PASS foo({f:"blah135"}, {f:"blah865"}) is [14, false]
+PASS bar({f:"blah135"}, {f:"blah865"}) is 13
+PASS foo({f:"blah136"}, {f:"blah864"}) is [14, false]
+PASS bar({f:"blah136"}, {f:"blah864"}) is 13
+PASS foo({f:"blah137"}, {f:"blah863"}) is [14, false]
+PASS bar({f:"blah137"}, {f:"blah863"}) is 13
+PASS foo({f:"blah138"}, {f:"blah862"}) is [14, false]
+PASS bar({f:"blah138"}, {f:"blah862"}) is 13
+PASS foo({f:"blah139"}, {f:"blah861"}) is [14, false]
+PASS bar({f:"blah139"}, {f:"blah861"}) is 13
+PASS foo({f:"blah140"}, {f:"blah860"}) is [14, false]
+PASS bar({f:"blah140"}, {f:"blah860"}) is 13
+PASS foo({f:"blah141"}, {f:"blah859"}) is [14, false]
+PASS bar({f:"blah141"}, {f:"blah859"}) is 13
+PASS foo({f:"blah142"}, {f:"blah858"}) is [14, false]
+PASS bar({f:"blah142"}, {f:"blah858"}) is 13
+PASS foo({f:"blah143"}, {f:"blah857"}) is [14, false]
+PASS bar({f:"blah143"}, {f:"blah857"}) is 13
+PASS foo({f:"blah144"}, {f:"blah856"}) is [14, false]
+PASS bar({f:"blah144"}, {f:"blah856"}) is 13
+PASS foo({f:"blah145"}, {f:"blah855"}) is [14, false]
+PASS bar({f:"blah145"}, {f:"blah855"}) is 13
+PASS foo({f:"blah146"}, {f:"blah854"}) is [14, false]
+PASS bar({f:"blah146"}, {f:"blah854"}) is 13
+PASS foo({f:"blah147"}, {f:"blah853"}) is [14, false]
+PASS bar({f:"blah147"}, {f:"blah853"}) is 13
+PASS foo({f:"blah148"}, {f:"blah852"}) is [14, false]
+PASS bar({f:"blah148"}, {f:"blah852"}) is 13
+PASS foo({f:"blah149"}, {f:"blah851"}) is [14, false]
+PASS bar({f:"blah149"}, {f:"blah851"}) is 13
+PASS foo({f:"blah150"}, {f:"blah850"}) is [14, false]
+PASS bar({f:"blah150"}, {f:"blah850"}) is 13
+PASS foo({f:"blah151"}, {f:"blah849"}) is [14, false]
+PASS bar({f:"blah151"}, {f:"blah849"}) is 13
+PASS foo({f:"blah152"}, {f:"blah848"}) is [14, false]
+PASS bar({f:"blah152"}, {f:"blah848"}) is 13
+PASS foo({f:"blah153"}, {f:"blah847"}) is [14, false]
+PASS bar({f:"blah153"}, {f:"blah847"}) is 13
+PASS foo({f:"blah154"}, {f:"blah846"}) is [14, false]
+PASS bar({f:"blah154"}, {f:"blah846"}) is 13
+PASS foo({f:"blah155"}, {f:"blah845"}) is [14, false]
+PASS bar({f:"blah155"}, {f:"blah845"}) is 13
+PASS foo({f:"blah156"}, {f:"blah844"}) is [14, false]
+PASS bar({f:"blah156"}, {f:"blah844"}) is 13
+PASS foo({f:"blah157"}, {f:"blah843"}) is [14, false]
+PASS bar({f:"blah157"}, {f:"blah843"}) is 13
+PASS foo({f:"blah158"}, {f:"blah842"}) is [14, false]
+PASS bar({f:"blah158"}, {f:"blah842"}) is 13
+PASS foo({f:"blah159"}, {f:"blah841"}) is [14, false]
+PASS bar({f:"blah159"}, {f:"blah841"}) is 13
+PASS foo({f:"blah160"}, {f:"blah840"}) is [14, false]
+PASS bar({f:"blah160"}, {f:"blah840"}) is 13
+PASS foo({f:"blah161"}, {f:"blah839"}) is [14, false]
+PASS bar({f:"blah161"}, {f:"blah839"}) is 13
+PASS foo({f:"blah162"}, {f:"blah838"}) is [14, false]
+PASS bar({f:"blah162"}, {f:"blah838"}) is 13
+PASS foo({f:"blah163"}, {f:"blah837"}) is [14, false]
+PASS bar({f:"blah163"}, {f:"blah837"}) is 13
+PASS foo({f:"blah164"}, {f:"blah836"}) is [14, false]
+PASS bar({f:"blah164"}, {f:"blah836"}) is 13
+PASS foo({f:"blah165"}, {f:"blah835"}) is [14, false]
+PASS bar({f:"blah165"}, {f:"blah835"}) is 13
+PASS foo({f:"blah166"}, {f:"blah834"}) is [14, false]
+PASS bar({f:"blah166"}, {f:"blah834"}) is 13
+PASS foo({f:"blah167"}, {f:"blah833"}) is [14, false]
+PASS bar({f:"blah167"}, {f:"blah833"}) is 13
+PASS foo({f:"blah168"}, {f:"blah832"}) is [14, false]
+PASS bar({f:"blah168"}, {f:"blah832"}) is 13
+PASS foo({f:"blah169"}, {f:"blah831"}) is [14, false]
+PASS bar({f:"blah169"}, {f:"blah831"}) is 13
+PASS foo({f:"blah170"}, {f:"blah830"}) is [14, false]
+PASS bar({f:"blah170"}, {f:"blah830"}) is 13
+PASS foo({f:"blah171"}, {f:"blah829"}) is [14, false]
+PASS bar({f:"blah171"}, {f:"blah829"}) is 13
+PASS foo({f:"blah172"}, {f:"blah828"}) is [14, false]
+PASS bar({f:"blah172"}, {f:"blah828"}) is 13
+PASS foo({f:"blah173"}, {f:"blah827"}) is [14, false]
+PASS bar({f:"blah173"}, {f:"blah827"}) is 13
+PASS foo({f:"blah174"}, {f:"blah826"}) is [14, false]
+PASS bar({f:"blah174"}, {f:"blah826"}) is 13
+PASS foo({f:"blah175"}, {f:"blah825"}) is [14, false]
+PASS bar({f:"blah175"}, {f:"blah825"}) is 13
+PASS foo({f:"blah176"}, {f:"blah824"}) is [14, false]
+PASS bar({f:"blah176"}, {f:"blah824"}) is 13
+PASS foo({f:"blah177"}, {f:"blah823"}) is [14, false]
+PASS bar({f:"blah177"}, {f:"blah823"}) is 13
+PASS foo({f:"blah178"}, {f:"blah822"}) is [14, false]
+PASS bar({f:"blah178"}, {f:"blah822"}) is 13
+PASS foo({f:"blah179"}, {f:"blah821"}) is [14, false]
+PASS bar({f:"blah179"}, {f:"blah821"}) is 13
+PASS foo({f:"blah180"}, {f:"blah820"}) is [14, false]
+PASS bar({f:"blah180"}, {f:"blah820"}) is 13
+PASS foo({f:"blah181"}, {f:"blah819"}) is [14, false]
+PASS bar({f:"blah181"}, {f:"blah819"}) is 13
+PASS foo({f:"blah182"}, {f:"blah818"}) is [14, false]
+PASS bar({f:"blah182"}, {f:"blah818"}) is 13
+PASS foo({f:"blah183"}, {f:"blah817"}) is [14, false]
+PASS bar({f:"blah183"}, {f:"blah817"}) is 13
+PASS foo({f:"blah184"}, {f:"blah816"}) is [14, false]
+PASS bar({f:"blah184"}, {f:"blah816"}) is 13
+PASS foo({f:"blah185"}, {f:"blah815"}) is [14, false]
+PASS bar({f:"blah185"}, {f:"blah815"}) is 13
+PASS foo({f:"blah186"}, {f:"blah814"}) is [14, false]
+PASS bar({f:"blah186"}, {f:"blah814"}) is 13
+PASS foo({f:"blah187"}, {f:"blah813"}) is [14, false]
+PASS bar({f:"blah187"}, {f:"blah813"}) is 13
+PASS foo({f:"blah188"}, {f:"blah812"}) is [14, false]
+PASS bar({f:"blah188"}, {f:"blah812"}) is 13
+PASS foo({f:"blah189"}, {f:"blah811"}) is [14, false]
+PASS bar({f:"blah189"}, {f:"blah811"}) is 13
+PASS foo({f:"blah190"}, {f:"blah810"}) is [14, false]
+PASS bar({f:"blah190"}, {f:"blah810"}) is 13
+PASS foo({f:"blah191"}, {f:"blah809"}) is [14, false]
+PASS bar({f:"blah191"}, {f:"blah809"}) is 13
+PASS foo({f:"blah192"}, {f:"blah808"}) is [14, false]
+PASS bar({f:"blah192"}, {f:"blah808"}) is 13
+PASS foo({f:"blah193"}, {f:"blah807"}) is [14, false]
+PASS bar({f:"blah193"}, {f:"blah807"}) is 13
+PASS foo({f:"blah194"}, {f:"blah806"}) is [14, false]
+PASS bar({f:"blah194"}, {f:"blah806"}) is 13
+PASS foo({f:"blah195"}, {f:"blah805"}) is [14, false]
+PASS bar({f:"blah195"}, {f:"blah805"}) is 13
+PASS foo({f:"blah196"}, {f:"blah804"}) is [14, false]
+PASS bar({f:"blah196"}, {f:"blah804"}) is 13
+PASS foo({f:"blah197"}, {f:"blah803"}) is [14, false]
+PASS bar({f:"blah197"}, {f:"blah803"}) is 13
+PASS foo({f:"blah198"}, {f:"blah802"}) is [14, false]
+PASS bar({f:"blah198"}, {f:"blah802"}) is 13
+PASS foo({f:"blah199"}, {f:"blah801"}) is [14, false]
+PASS bar({f:"blah199"}, {f:"blah801"}) is 13
+PASS foo({f:"blah200"}, {f:"blah800"}) is [14, false]
+PASS bar({f:"blah200"}, {f:"blah800"}) is 13
+PASS foo({f:"blah201"}, {f:"blah799"}) is [14, false]
+PASS bar({f:"blah201"}, {f:"blah799"}) is 13
+PASS foo({f:"blah202"}, {f:"blah798"}) is [14, false]
+PASS bar({f:"blah202"}, {f:"blah798"}) is 13
+PASS foo({f:"blah203"}, {f:"blah797"}) is [14, false]
+PASS bar({f:"blah203"}, {f:"blah797"}) is 13
+PASS foo({f:"blah204"}, {f:"blah796"}) is [14, false]
+PASS bar({f:"blah204"}, {f:"blah796"}) is 13
+PASS foo({f:"blah205"}, {f:"blah795"}) is [14, false]
+PASS bar({f:"blah205"}, {f:"blah795"}) is 13
+PASS foo({f:"blah206"}, {f:"blah794"}) is [14, false]
+PASS bar({f:"blah206"}, {f:"blah794"}) is 13
+PASS foo({f:"blah207"}, {f:"blah793"}) is [14, false]
+PASS bar({f:"blah207"}, {f:"blah793"}) is 13
+PASS foo({f:"blah208"}, {f:"blah792"}) is [14, false]
+PASS bar({f:"blah208"}, {f:"blah792"}) is 13
+PASS foo({f:"blah209"}, {f:"blah791"}) is [14, false]
+PASS bar({f:"blah209"}, {f:"blah791"}) is 13
+PASS foo({f:"blah210"}, {f:"blah790"}) is [14, false]
+PASS bar({f:"blah210"}, {f:"blah790"}) is 13
+PASS foo({f:"blah211"}, {f:"blah789"}) is [14, false]
+PASS bar({f:"blah211"}, {f:"blah789"}) is 13
+PASS foo({f:"blah212"}, {f:"blah788"}) is [14, false]
+PASS bar({f:"blah212"}, {f:"blah788"}) is 13
+PASS foo({f:"blah213"}, {f:"blah787"}) is [14, false]
+PASS bar({f:"blah213"}, {f:"blah787"}) is 13
+PASS foo({f:"blah214"}, {f:"blah786"}) is [14, false]
+PASS bar({f:"blah214"}, {f:"blah786"}) is 13
+PASS foo({f:"blah215"}, {f:"blah785"}) is [14, false]
+PASS bar({f:"blah215"}, {f:"blah785"}) is 13
+PASS foo({f:"blah216"}, {f:"blah784"}) is [14, false]
+PASS bar({f:"blah216"}, {f:"blah784"}) is 13
+PASS foo({f:"blah217"}, {f:"blah783"}) is [14, false]
+PASS bar({f:"blah217"}, {f:"blah783"}) is 13
+PASS foo({f:"blah218"}, {f:"blah782"}) is [14, false]
+PASS bar({f:"blah218"}, {f:"blah782"}) is 13
+PASS foo({f:"blah219"}, {f:"blah781"}) is [14, false]
+PASS bar({f:"blah219"}, {f:"blah781"}) is 13
+PASS foo({f:"blah220"}, {f:"blah780"}) is [14, false]
+PASS bar({f:"blah220"}, {f:"blah780"}) is 13
+PASS foo({f:"blah221"}, {f:"blah779"}) is [14, false]
+PASS bar({f:"blah221"}, {f:"blah779"}) is 13
+PASS foo({f:"blah222"}, {f:"blah778"}) is [14, false]
+PASS bar({f:"blah222"}, {f:"blah778"}) is 13
+PASS foo({f:"blah223"}, {f:"blah777"}) is [14, false]
+PASS bar({f:"blah223"}, {f:"blah777"}) is 13
+PASS foo({f:"blah224"}, {f:"blah776"}) is [14, false]
+PASS bar({f:"blah224"}, {f:"blah776"}) is 13
+PASS foo({f:"blah225"}, {f:"blah775"}) is [14, false]
+PASS bar({f:"blah225"}, {f:"blah775"}) is 13
+PASS foo({f:"blah226"}, {f:"blah774"}) is [14, false]
+PASS bar({f:"blah226"}, {f:"blah774"}) is 13
+PASS foo({f:"blah227"}, {f:"blah773"}) is [14, false]
+PASS bar({f:"blah227"}, {f:"blah773"}) is 13
+PASS foo({f:"blah228"}, {f:"blah772"}) is [14, false]
+PASS bar({f:"blah228"}, {f:"blah772"}) is 13
+PASS foo({f:"blah229"}, {f:"blah771"}) is [14, false]
+PASS bar({f:"blah229"}, {f:"blah771"}) is 13
+PASS foo({f:"blah230"}, {f:"blah770"}) is [14, false]
+PASS bar({f:"blah230"}, {f:"blah770"}) is 13
+PASS foo({f:"blah231"}, {f:"blah769"}) is [14, false]
+PASS bar({f:"blah231"}, {f:"blah769"}) is 13
+PASS foo({f:"blah232"}, {f:"blah768"}) is [14, false]
+PASS bar({f:"blah232"}, {f:"blah768"}) is 13
+PASS foo({f:"blah233"}, {f:"blah767"}) is [14, false]
+PASS bar({f:"blah233"}, {f:"blah767"}) is 13
+PASS foo({f:"blah234"}, {f:"blah766"}) is [14, false]
+PASS bar({f:"blah234"}, {f:"blah766"}) is 13
+PASS foo({f:"blah235"}, {f:"blah765"}) is [14, false]
+PASS bar({f:"blah235"}, {f:"blah765"}) is 13
+PASS foo({f:"blah236"}, {f:"blah764"}) is [14, false]
+PASS bar({f:"blah236"}, {f:"blah764"}) is 13
+PASS foo({f:"blah237"}, {f:"blah763"}) is [14, false]
+PASS bar({f:"blah237"}, {f:"blah763"}) is 13
+PASS foo({f:"blah238"}, {f:"blah762"}) is [14, false]
+PASS bar({f:"blah238"}, {f:"blah762"}) is 13
+PASS foo({f:"blah239"}, {f:"blah761"}) is [14, false]
+PASS bar({f:"blah239"}, {f:"blah761"}) is 13
+PASS foo({f:"blah240"}, {f:"blah760"}) is [14, false]
+PASS bar({f:"blah240"}, {f:"blah760"}) is 13
+PASS foo({f:"blah241"}, {f:"blah759"}) is [14, false]
+PASS bar({f:"blah241"}, {f:"blah759"}) is 13
+PASS foo({f:"blah242"}, {f:"blah758"}) is [14, false]
+PASS bar({f:"blah242"}, {f:"blah758"}) is 13
+PASS foo({f:"blah243"}, {f:"blah757"}) is [14, false]
+PASS bar({f:"blah243"}, {f:"blah757"}) is 13
+PASS foo({f:"blah244"}, {f:"blah756"}) is [14, false]
+PASS bar({f:"blah244"}, {f:"blah756"}) is 13
+PASS foo({f:"blah245"}, {f:"blah755"}) is [14, false]
+PASS bar({f:"blah245"}, {f:"blah755"}) is 13
+PASS foo({f:"blah246"}, {f:"blah754"}) is [14, false]
+PASS bar({f:"blah246"}, {f:"blah754"}) is 13
+PASS foo({f:"blah247"}, {f:"blah753"}) is [14, false]
+PASS bar({f:"blah247"}, {f:"blah753"}) is 13
+PASS foo({f:"blah248"}, {f:"blah752"}) is [14, false]
+PASS bar({f:"blah248"}, {f:"blah752"}) is 13
+PASS foo({f:"blah249"}, {f:"blah751"}) is [14, false]
+PASS bar({f:"blah249"}, {f:"blah751"}) is 13
+PASS foo({f:"blah250"}, {f:"blah750"}) is [14, false]
+PASS bar({f:"blah250"}, {f:"blah750"}) is 13
+PASS foo({f:"blah251"}, {f:"blah749"}) is [14, false]
+PASS bar({f:"blah251"}, {f:"blah749"}) is 13
+PASS foo({f:"blah252"}, {f:"blah748"}) is [14, false]
+PASS bar({f:"blah252"}, {f:"blah748"}) is 13
+PASS foo({f:"blah253"}, {f:"blah747"}) is [14, false]
+PASS bar({f:"blah253"}, {f:"blah747"}) is 13
+PASS foo({f:"blah254"}, {f:"blah746"}) is [14, false]
+PASS bar({f:"blah254"}, {f:"blah746"}) is 13
+PASS foo({f:"blah255"}, {f:"blah745"}) is [14, false]
+PASS bar({f:"blah255"}, {f:"blah745"}) is 13
+PASS foo({f:"blah256"}, {f:"blah744"}) is [14, false]
+PASS bar({f:"blah256"}, {f:"blah744"}) is 13
+PASS foo({f:"blah257"}, {f:"blah743"}) is [14, false]
+PASS bar({f:"blah257"}, {f:"blah743"}) is 13
+PASS foo({f:"blah258"}, {f:"blah742"}) is [14, false]
+PASS bar({f:"blah258"}, {f:"blah742"}) is 13
+PASS foo({f:"blah259"}, {f:"blah741"}) is [14, false]
+PASS bar({f:"blah259"}, {f:"blah741"}) is 13
+PASS foo({f:"blah260"}, {f:"blah740"}) is [14, false]
+PASS bar({f:"blah260"}, {f:"blah740"}) is 13
+PASS foo({f:"blah261"}, {f:"blah739"}) is [14, false]
+PASS bar({f:"blah261"}, {f:"blah739"}) is 13
+PASS foo({f:"blah262"}, {f:"blah738"}) is [14, false]
+PASS bar({f:"blah262"}, {f:"blah738"}) is 13
+PASS foo({f:"blah263"}, {f:"blah737"}) is [14, false]
+PASS bar({f:"blah263"}, {f:"blah737"}) is 13
+PASS foo({f:"blah264"}, {f:"blah736"}) is [14, false]
+PASS bar({f:"blah264"}, {f:"blah736"}) is 13
+PASS foo({f:"blah265"}, {f:"blah735"}) is [14, false]
+PASS bar({f:"blah265"}, {f:"blah735"}) is 13
+PASS foo({f:"blah266"}, {f:"blah734"}) is [14, false]
+PASS bar({f:"blah266"}, {f:"blah734"}) is 13
+PASS foo({f:"blah267"}, {f:"blah733"}) is [14, false]
+PASS bar({f:"blah267"}, {f:"blah733"}) is 13
+PASS foo({f:"blah268"}, {f:"blah732"}) is [14, false]
+PASS bar({f:"blah268"}, {f:"blah732"}) is 13
+PASS foo({f:"blah269"}, {f:"blah731"}) is [14, false]
+PASS bar({f:"blah269"}, {f:"blah731"}) is 13
+PASS foo({f:"blah270"}, {f:"blah730"}) is [14, false]
+PASS bar({f:"blah270"}, {f:"blah730"}) is 13
+PASS foo({f:"blah271"}, {f:"blah729"}) is [14, false]
+PASS bar({f:"blah271"}, {f:"blah729"}) is 13
+PASS foo({f:"blah272"}, {f:"blah728"}) is [14, false]
+PASS bar({f:"blah272"}, {f:"blah728"}) is 13
+PASS foo({f:"blah273"}, {f:"blah727"}) is [14, false]
+PASS bar({f:"blah273"}, {f:"blah727"}) is 13
+PASS foo({f:"blah274"}, {f:"blah726"}) is [14, false]
+PASS bar({f:"blah274"}, {f:"blah726"}) is 13
+PASS foo({f:"blah275"}, {f:"blah725"}) is [14, false]
+PASS bar({f:"blah275"}, {f:"blah725"}) is 13
+PASS foo({f:"blah276"}, {f:"blah724"}) is [14, false]
+PASS bar({f:"blah276"}, {f:"blah724"}) is 13
+PASS foo({f:"blah277"}, {f:"blah723"}) is [14, false]
+PASS bar({f:"blah277"}, {f:"blah723"}) is 13
+PASS foo({f:"blah278"}, {f:"blah722"}) is [14, false]
+PASS bar({f:"blah278"}, {f:"blah722"}) is 13
+PASS foo({f:"blah279"}, {f:"blah721"}) is [14, false]
+PASS bar({f:"blah279"}, {f:"blah721"}) is 13
+PASS foo({f:"blah280"}, {f:"blah720"}) is [14, false]
+PASS bar({f:"blah280"}, {f:"blah720"}) is 13
+PASS foo({f:"blah281"}, {f:"blah719"}) is [14, false]
+PASS bar({f:"blah281"}, {f:"blah719"}) is 13
+PASS foo({f:"blah282"}, {f:"blah718"}) is [14, false]
+PASS bar({f:"blah282"}, {f:"blah718"}) is 13
+PASS foo({f:"blah283"}, {f:"blah717"}) is [14, false]
+PASS bar({f:"blah283"}, {f:"blah717"}) is 13
+PASS foo({f:"blah284"}, {f:"blah716"}) is [14, false]
+PASS bar({f:"blah284"}, {f:"blah716"}) is 13
+PASS foo({f:"blah285"}, {f:"blah715"}) is [14, false]
+PASS bar({f:"blah285"}, {f:"blah715"}) is 13
+PASS foo({f:"blah286"}, {f:"blah714"}) is [14, false]
+PASS bar({f:"blah286"}, {f:"blah714"}) is 13
+PASS foo({f:"blah287"}, {f:"blah713"}) is [14, false]
+PASS bar({f:"blah287"}, {f:"blah713"}) is 13
+PASS foo({f:"blah288"}, {f:"blah712"}) is [14, false]
+PASS bar({f:"blah288"}, {f:"blah712"}) is 13
+PASS foo({f:"blah289"}, {f:"blah711"}) is [14, false]
+PASS bar({f:"blah289"}, {f:"blah711"}) is 13
+PASS foo({f:"blah290"}, {f:"blah710"}) is [14, false]
+PASS bar({f:"blah290"}, {f:"blah710"}) is 13
+PASS foo({f:"blah291"}, {f:"blah709"}) is [14, false]
+PASS bar({f:"blah291"}, {f:"blah709"}) is 13
+PASS foo({f:"blah292"}, {f:"blah708"}) is [14, false]
+PASS bar({f:"blah292"}, {f:"blah708"}) is 13
+PASS foo({f:"blah293"}, {f:"blah707"}) is [14, false]
+PASS bar({f:"blah293"}, {f:"blah707"}) is 13
+PASS foo({f:"blah294"}, {f:"blah706"}) is [14, false]
+PASS bar({f:"blah294"}, {f:"blah706"}) is 13
+PASS foo({f:"blah295"}, {f:"blah705"}) is [14, false]
+PASS bar({f:"blah295"}, {f:"blah705"}) is 13
+PASS foo({f:"blah296"}, {f:"blah704"}) is [14, false]
+PASS bar({f:"blah296"}, {f:"blah704"}) is 13
+PASS foo({f:"blah297"}, {f:"blah703"}) is [14, false]
+PASS bar({f:"blah297"}, {f:"blah703"}) is 13
+PASS foo({f:"blah298"}, {f:"blah702"}) is [14, false]
+PASS bar({f:"blah298"}, {f:"blah702"}) is 13
+PASS foo({f:"blah299"}, {f:"blah701"}) is [14, false]
+PASS bar({f:"blah299"}, {f:"blah701"}) is 13
+PASS foo({f:"blah300"}, {f:"blah700"}) is [14, false]
+PASS bar({f:"blah300"}, {f:"blah700"}) is 13
+PASS foo({f:"blah301"}, {f:"blah699"}) is [14, false]
+PASS bar({f:"blah301"}, {f:"blah699"}) is 13
+PASS foo({f:"blah302"}, {f:"blah698"}) is [14, false]
+PASS bar({f:"blah302"}, {f:"blah698"}) is 13
+PASS foo({f:"blah303"}, {f:"blah697"}) is [14, false]
+PASS bar({f:"blah303"}, {f:"blah697"}) is 13
+PASS foo({f:"blah304"}, {f:"blah696"}) is [14, false]
+PASS bar({f:"blah304"}, {f:"blah696"}) is 13
+PASS foo({f:"blah305"}, {f:"blah695"}) is [14, false]
+PASS bar({f:"blah305"}, {f:"blah695"}) is 13
+PASS foo({f:"blah306"}, {f:"blah694"}) is [14, false]
+PASS bar({f:"blah306"}, {f:"blah694"}) is 13
+PASS foo({f:"blah307"}, {f:"blah693"}) is [14, false]
+PASS bar({f:"blah307"}, {f:"blah693"}) is 13
+PASS foo({f:"blah308"}, {f:"blah692"}) is [14, false]
+PASS bar({f:"blah308"}, {f:"blah692"}) is 13
+PASS foo({f:"blah309"}, {f:"blah691"}) is [14, false]
+PASS bar({f:"blah309"}, {f:"blah691"}) is 13
+PASS foo({f:"blah310"}, {f:"blah690"}) is [14, false]
+PASS bar({f:"blah310"}, {f:"blah690"}) is 13
+PASS foo({f:"blah311"}, {f:"blah689"}) is [14, false]
+PASS bar({f:"blah311"}, {f:"blah689"}) is 13
+PASS foo({f:"blah312"}, {f:"blah688"}) is [14, false]
+PASS bar({f:"blah312"}, {f:"blah688"}) is 13
+PASS foo({f:"blah313"}, {f:"blah687"}) is [14, false]
+PASS bar({f:"blah313"}, {f:"blah687"}) is 13
+PASS foo({f:"blah314"}, {f:"blah686"}) is [14, false]
+PASS bar({f:"blah314"}, {f:"blah686"}) is 13
+PASS foo({f:"blah315"}, {f:"blah685"}) is [14, false]
+PASS bar({f:"blah315"}, {f:"blah685"}) is 13
+PASS foo({f:"blah316"}, {f:"blah684"}) is [14, false]
+PASS bar({f:"blah316"}, {f:"blah684"}) is 13
+PASS foo({f:"blah317"}, {f:"blah683"}) is [14, false]
+PASS bar({f:"blah317"}, {f:"blah683"}) is 13
+PASS foo({f:"blah318"}, {f:"blah682"}) is [14, false]
+PASS bar({f:"blah318"}, {f:"blah682"}) is 13
+PASS foo({f:"blah319"}, {f:"blah681"}) is [14, false]
+PASS bar({f:"blah319"}, {f:"blah681"}) is 13
+PASS foo({f:"blah320"}, {f:"blah680"}) is [14, false]
+PASS bar({f:"blah320"}, {f:"blah680"}) is 13
+PASS foo({f:"blah321"}, {f:"blah679"}) is [14, false]
+PASS bar({f:"blah321"}, {f:"blah679"}) is 13
+PASS foo({f:"blah322"}, {f:"blah678"}) is [14, false]
+PASS bar({f:"blah322"}, {f:"blah678"}) is 13
+PASS foo({f:"blah323"}, {f:"blah677"}) is [14, false]
+PASS bar({f:"blah323"}, {f:"blah677"}) is 13
+PASS foo({f:"blah324"}, {f:"blah676"}) is [14, false]
+PASS bar({f:"blah324"}, {f:"blah676"}) is 13
+PASS foo({f:"blah325"}, {f:"blah675"}) is [14, false]
+PASS bar({f:"blah325"}, {f:"blah675"}) is 13
+PASS foo({f:"blah326"}, {f:"blah674"}) is [14, false]
+PASS bar({f:"blah326"}, {f:"blah674"}) is 13
+PASS foo({f:"blah327"}, {f:"blah673"}) is [14, false]
+PASS bar({f:"blah327"}, {f:"blah673"}) is 13
+PASS foo({f:"blah328"}, {f:"blah672"}) is [14, false]
+PASS bar({f:"blah328"}, {f:"blah672"}) is 13
+PASS foo({f:"blah329"}, {f:"blah671"}) is [14, false]
+PASS bar({f:"blah329"}, {f:"blah671"}) is 13
+PASS foo({f:"blah330"}, {f:"blah670"}) is [14, false]
+PASS bar({f:"blah330"}, {f:"blah670"}) is 13
+PASS foo({f:"blah331"}, {f:"blah669"}) is [14, false]
+PASS bar({f:"blah331"}, {f:"blah669"}) is 13
+PASS foo({f:"blah332"}, {f:"blah668"}) is [14, false]
+PASS bar({f:"blah332"}, {f:"blah668"}) is 13
+PASS foo({f:"blah333"}, {f:"blah667"}) is [14, false]
+PASS bar({f:"blah333"}, {f:"blah667"}) is 13
+PASS foo({f:"blah334"}, {f:"blah666"}) is [14, false]
+PASS bar({f:"blah334"}, {f:"blah666"}) is 13
+PASS foo({f:"blah335"}, {f:"blah665"}) is [14, false]
+PASS bar({f:"blah335"}, {f:"blah665"}) is 13
+PASS foo({f:"blah336"}, {f:"blah664"}) is [14, false]
+PASS bar({f:"blah336"}, {f:"blah664"}) is 13
+PASS foo({f:"blah337"}, {f:"blah663"}) is [14, false]
+PASS bar({f:"blah337"}, {f:"blah663"}) is 13
+PASS foo({f:"blah338"}, {f:"blah662"}) is [14, false]
+PASS bar({f:"blah338"}, {f:"blah662"}) is 13
+PASS foo({f:"blah339"}, {f:"blah661"}) is [14, false]
+PASS bar({f:"blah339"}, {f:"blah661"}) is 13
+PASS foo({f:"blah340"}, {f:"blah660"}) is [14, false]
+PASS bar({f:"blah340"}, {f:"blah660"}) is 13
+PASS foo({f:"blah341"}, {f:"blah659"}) is [14, false]
+PASS bar({f:"blah341"}, {f:"blah659"}) is 13
+PASS foo({f:"blah342"}, {f:"blah658"}) is [14, false]
+PASS bar({f:"blah342"}, {f:"blah658"}) is 13
+PASS foo({f:"blah343"}, {f:"blah657"}) is [14, false]
+PASS bar({f:"blah343"}, {f:"blah657"}) is 13
+PASS foo({f:"blah344"}, {f:"blah656"}) is [14, false]
+PASS bar({f:"blah344"}, {f:"blah656"}) is 13
+PASS foo({f:"blah345"}, {f:"blah655"}) is [14, false]
+PASS bar({f:"blah345"}, {f:"blah655"}) is 13
+PASS foo({f:"blah346"}, {f:"blah654"}) is [14, false]
+PASS bar({f:"blah346"}, {f:"blah654"}) is 13
+PASS foo({f:"blah347"}, {f:"blah653"}) is [14, false]
+PASS bar({f:"blah347"}, {f:"blah653"}) is 13
+PASS foo({f:"blah348"}, {f:"blah652"}) is [14, false]
+PASS bar({f:"blah348"}, {f:"blah652"}) is 13
+PASS foo({f:"blah349"}, {f:"blah651"}) is [14, false]
+PASS bar({f:"blah349"}, {f:"blah651"}) is 13
+PASS foo({f:"blah350"}, {f:"blah650"}) is [14, false]
+PASS bar({f:"blah350"}, {f:"blah650"}) is 13
+PASS foo({f:"blah351"}, {f:"blah649"}) is [14, false]
+PASS bar({f:"blah351"}, {f:"blah649"}) is 13
+PASS foo({f:"blah352"}, {f:"blah648"}) is [14, false]
+PASS bar({f:"blah352"}, {f:"blah648"}) is 13
+PASS foo({f:"blah353"}, {f:"blah647"}) is [14, false]
+PASS bar({f:"blah353"}, {f:"blah647"}) is 13
+PASS foo({f:"blah354"}, {f:"blah646"}) is [14, false]
+PASS bar({f:"blah354"}, {f:"blah646"}) is 13
+PASS foo({f:"blah355"}, {f:"blah645"}) is [14, false]
+PASS bar({f:"blah355"}, {f:"blah645"}) is 13
+PASS foo({f:"blah356"}, {f:"blah644"}) is [14, false]
+PASS bar({f:"blah356"}, {f:"blah644"}) is 13
+PASS foo({f:"blah357"}, {f:"blah643"}) is [14, false]
+PASS bar({f:"blah357"}, {f:"blah643"}) is 13
+PASS foo({f:"blah358"}, {f:"blah642"}) is [14, false]
+PASS bar({f:"blah358"}, {f:"blah642"}) is 13
+PASS foo({f:"blah359"}, {f:"blah641"}) is [14, false]
+PASS bar({f:"blah359"}, {f:"blah641"}) is 13
+PASS foo({f:"blah360"}, {f:"blah640"}) is [14, false]
+PASS bar({f:"blah360"}, {f:"blah640"}) is 13
+PASS foo({f:"blah361"}, {f:"blah639"}) is [14, false]
+PASS bar({f:"blah361"}, {f:"blah639"}) is 13
+PASS foo({f:"blah362"}, {f:"blah638"}) is [14, false]
+PASS bar({f:"blah362"}, {f:"blah638"}) is 13
+PASS foo({f:"blah363"}, {f:"blah637"}) is [14, false]
+PASS bar({f:"blah363"}, {f:"blah637"}) is 13
+PASS foo({f:"blah364"}, {f:"blah636"}) is [14, false]
+PASS bar({f:"blah364"}, {f:"blah636"}) is 13
+PASS foo({f:"blah365"}, {f:"blah635"}) is [14, false]
+PASS bar({f:"blah365"}, {f:"blah635"}) is 13
+PASS foo({f:"blah366"}, {f:"blah634"}) is [14, false]
+PASS bar({f:"blah366"}, {f:"blah634"}) is 13
+PASS foo({f:"blah367"}, {f:"blah633"}) is [14, false]
+PASS bar({f:"blah367"}, {f:"blah633"}) is 13
+PASS foo({f:"blah368"}, {f:"blah632"}) is [14, false]
+PASS bar({f:"blah368"}, {f:"blah632"}) is 13
+PASS foo({f:"blah369"}, {f:"blah631"}) is [14, false]
+PASS bar({f:"blah369"}, {f:"blah631"}) is 13
+PASS foo({f:"blah370"}, {f:"blah630"}) is [14, false]
+PASS bar({f:"blah370"}, {f:"blah630"}) is 13
+PASS foo({f:"blah371"}, {f:"blah629"}) is [14, false]
+PASS bar({f:"blah371"}, {f:"blah629"}) is 13
+PASS foo({f:"blah372"}, {f:"blah628"}) is [14, false]
+PASS bar({f:"blah372"}, {f:"blah628"}) is 13
+PASS foo({f:"blah373"}, {f:"blah627"}) is [14, false]
+PASS bar({f:"blah373"}, {f:"blah627"}) is 13
+PASS foo({f:"blah374"}, {f:"blah626"}) is [14, false]
+PASS bar({f:"blah374"}, {f:"blah626"}) is 13
+PASS foo({f:"blah375"}, {f:"blah625"}) is [14, false]
+PASS bar({f:"blah375"}, {f:"blah625"}) is 13
+PASS foo({f:"blah376"}, {f:"blah624"}) is [14, false]
+PASS bar({f:"blah376"}, {f:"blah624"}) is 13
+PASS foo({f:"blah377"}, {f:"blah623"}) is [14, false]
+PASS bar({f:"blah377"}, {f:"blah623"}) is 13
+PASS foo({f:"blah378"}, {f:"blah622"}) is [14, false]
+PASS bar({f:"blah378"}, {f:"blah622"}) is 13
+PASS foo({f:"blah379"}, {f:"blah621"}) is [14, false]
+PASS bar({f:"blah379"}, {f:"blah621"}) is 13
+PASS foo({f:"blah380"}, {f:"blah620"}) is [14, false]
+PASS bar({f:"blah380"}, {f:"blah620"}) is 13
+PASS foo({f:"blah381"}, {f:"blah619"}) is [14, false]
+PASS bar({f:"blah381"}, {f:"blah619"}) is 13
+PASS foo({f:"blah382"}, {f:"blah618"}) is [14, false]
+PASS bar({f:"blah382"}, {f:"blah618"}) is 13
+PASS foo({f:"blah383"}, {f:"blah617"}) is [14, false]
+PASS bar({f:"blah383"}, {f:"blah617"}) is 13
+PASS foo({f:"blah384"}, {f:"blah616"}) is [14, false]
+PASS bar({f:"blah384"}, {f:"blah616"}) is 13
+PASS foo({f:"blah385"}, {f:"blah615"}) is [14, false]
+PASS bar({f:"blah385"}, {f:"blah615"}) is 13
+PASS foo({f:"blah386"}, {f:"blah614"}) is [14, false]
+PASS bar({f:"blah386"}, {f:"blah614"}) is 13
+PASS foo({f:"blah387"}, {f:"blah613"}) is [14, false]
+PASS bar({f:"blah387"}, {f:"blah613"}) is 13
+PASS foo({f:"blah388"}, {f:"blah612"}) is [14, false]
+PASS bar({f:"blah388"}, {f:"blah612"}) is 13
+PASS foo({f:"blah389"}, {f:"blah611"}) is [14, false]
+PASS bar({f:"blah389"}, {f:"blah611"}) is 13
+PASS foo({f:"blah390"}, {f:"blah610"}) is [14, false]
+PASS bar({f:"blah390"}, {f:"blah610"}) is 13
+PASS foo({f:"blah391"}, {f:"blah609"}) is [14, false]
+PASS bar({f:"blah391"}, {f:"blah609"}) is 13
+PASS foo({f:"blah392"}, {f:"blah608"}) is [14, false]
+PASS bar({f:"blah392"}, {f:"blah608"}) is 13
+PASS foo({f:"blah393"}, {f:"blah607"}) is [14, false]
+PASS bar({f:"blah393"}, {f:"blah607"}) is 13
+PASS foo({f:"blah394"}, {f:"blah606"}) is [14, false]
+PASS bar({f:"blah394"}, {f:"blah606"}) is 13
+PASS foo({f:"blah395"}, {f:"blah605"}) is [14, false]
+PASS bar({f:"blah395"}, {f:"blah605"}) is 13
+PASS foo({f:"blah396"}, {f:"blah604"}) is [14, false]
+PASS bar({f:"blah396"}, {f:"blah604"}) is 13
+PASS foo({f:"blah397"}, {f:"blah603"}) is [14, false]
+PASS bar({f:"blah397"}, {f:"blah603"}) is 13
+PASS foo({f:"blah398"}, {f:"blah602"}) is [14, false]
+PASS bar({f:"blah398"}, {f:"blah602"}) is 13
+PASS foo({f:"blah399"}, {f:"blah601"}) is [14, false]
+PASS bar({f:"blah399"}, {f:"blah601"}) is 13
+PASS foo({f:"blah400"}, {f:"blah600"}) is [14, false]
+PASS bar({f:"blah400"}, {f:"blah600"}) is 13
+PASS foo({f:"blah401"}, {f:"blah599"}) is [14, false]
+PASS bar({f:"blah401"}, {f:"blah599"}) is 13
+PASS foo({f:"blah402"}, {f:"blah598"}) is [14, false]
+PASS bar({f:"blah402"}, {f:"blah598"}) is 13
+PASS foo({f:"blah403"}, {f:"blah597"}) is [14, false]
+PASS bar({f:"blah403"}, {f:"blah597"}) is 13
+PASS foo({f:"blah404"}, {f:"blah596"}) is [14, false]
+PASS bar({f:"blah404"}, {f:"blah596"}) is 13
+PASS foo({f:"blah405"}, {f:"blah595"}) is [14, false]
+PASS bar({f:"blah405"}, {f:"blah595"}) is 13
+PASS foo({f:"blah406"}, {f:"blah594"}) is [14, false]
+PASS bar({f:"blah406"}, {f:"blah594"}) is 13
+PASS foo({f:"blah407"}, {f:"blah593"}) is [14, false]
+PASS bar({f:"blah407"}, {f:"blah593"}) is 13
+PASS foo({f:"blah408"}, {f:"blah592"}) is [14, false]
+PASS bar({f:"blah408"}, {f:"blah592"}) is 13
+PASS foo({f:"blah409"}, {f:"blah591"}) is [14, false]
+PASS bar({f:"blah409"}, {f:"blah591"}) is 13
+PASS foo({f:"blah410"}, {f:"blah590"}) is [14, false]
+PASS bar({f:"blah410"}, {f:"blah590"}) is 13
+PASS foo({f:"blah411"}, {f:"blah589"}) is [14, false]
+PASS bar({f:"blah411"}, {f:"blah589"}) is 13
+PASS foo({f:"blah412"}, {f:"blah588"}) is [14, false]
+PASS bar({f:"blah412"}, {f:"blah588"}) is 13
+PASS foo({f:"blah413"}, {f:"blah587"}) is [14, false]
+PASS bar({f:"blah413"}, {f:"blah587"}) is 13
+PASS foo({f:"blah414"}, {f:"blah586"}) is [14, false]
+PASS bar({f:"blah414"}, {f:"blah586"}) is 13
+PASS foo({f:"blah415"}, {f:"blah585"}) is [14, false]
+PASS bar({f:"blah415"}, {f:"blah585"}) is 13
+PASS foo({f:"blah416"}, {f:"blah584"}) is [14, false]
+PASS bar({f:"blah416"}, {f:"blah584"}) is 13
+PASS foo({f:"blah417"}, {f:"blah583"}) is [14, false]
+PASS bar({f:"blah417"}, {f:"blah583"}) is 13
+PASS foo({f:"blah418"}, {f:"blah582"}) is [14, false]
+PASS bar({f:"blah418"}, {f:"blah582"}) is 13
+PASS foo({f:"blah419"}, {f:"blah581"}) is [14, false]
+PASS bar({f:"blah419"}, {f:"blah581"}) is 13
+PASS foo({f:"blah420"}, {f:"blah580"}) is [14, false]
+PASS bar({f:"blah420"}, {f:"blah580"}) is 13
+PASS foo({f:"blah421"}, {f:"blah579"}) is [14, false]
+PASS bar({f:"blah421"}, {f:"blah579"}) is 13
+PASS foo({f:"blah422"}, {f:"blah578"}) is [14, false]
+PASS bar({f:"blah422"}, {f:"blah578"}) is 13
+PASS foo({f:"blah423"}, {f:"blah577"}) is [14, false]
+PASS bar({f:"blah423"}, {f:"blah577"}) is 13
+PASS foo({f:"blah424"}, {f:"blah576"}) is [14, false]
+PASS bar({f:"blah424"}, {f:"blah576"}) is 13
+PASS foo({f:"blah425"}, {f:"blah575"}) is [14, false]
+PASS bar({f:"blah425"}, {f:"blah575"}) is 13
+PASS foo({f:"blah426"}, {f:"blah574"}) is [14, false]
+PASS bar({f:"blah426"}, {f:"blah574"}) is 13
+PASS foo({f:"blah427"}, {f:"blah573"}) is [14, false]
+PASS bar({f:"blah427"}, {f:"blah573"}) is 13
+PASS foo({f:"blah428"}, {f:"blah572"}) is [14, false]
+PASS bar({f:"blah428"}, {f:"blah572"}) is 13
+PASS foo({f:"blah429"}, {f:"blah571"}) is [14, false]
+PASS bar({f:"blah429"}, {f:"blah571"}) is 13
+PASS foo({f:"blah430"}, {f:"blah570"}) is [14, false]
+PASS bar({f:"blah430"}, {f:"blah570"}) is 13
+PASS foo({f:"blah431"}, {f:"blah569"}) is [14, false]
+PASS bar({f:"blah431"}, {f:"blah569"}) is 13
+PASS foo({f:"blah432"}, {f:"blah568"}) is [14, false]
+PASS bar({f:"blah432"}, {f:"blah568"}) is 13
+PASS foo({f:"blah433"}, {f:"blah567"}) is [14, false]
+PASS bar({f:"blah433"}, {f:"blah567"}) is 13
+PASS foo({f:"blah434"}, {f:"blah566"}) is [14, false]
+PASS bar({f:"blah434"}, {f:"blah566"}) is 13
+PASS foo({f:"blah435"}, {f:"blah565"}) is [14, false]
+PASS bar({f:"blah435"}, {f:"blah565"}) is 13
+PASS foo({f:"blah436"}, {f:"blah564"}) is [14, false]
+PASS bar({f:"blah436"}, {f:"blah564"}) is 13
+PASS foo({f:"blah437"}, {f:"blah563"}) is [14, false]
+PASS bar({f:"blah437"}, {f:"blah563"}) is 13
+PASS foo({f:"blah438"}, {f:"blah562"}) is [14, false]
+PASS bar({f:"blah438"}, {f:"blah562"}) is 13
+PASS foo({f:"blah439"}, {f:"blah561"}) is [14, false]
+PASS bar({f:"blah439"}, {f:"blah561"}) is 13
+PASS foo({f:"blah440"}, {f:"blah560"}) is [14, false]
+PASS bar({f:"blah440"}, {f:"blah560"}) is 13
+PASS foo({f:"blah441"}, {f:"blah559"}) is [14, false]
+PASS bar({f:"blah441"}, {f:"blah559"}) is 13
+PASS foo({f:"blah442"}, {f:"blah558"}) is [14, false]
+PASS bar({f:"blah442"}, {f:"blah558"}) is 13
+PASS foo({f:"blah443"}, {f:"blah557"}) is [14, false]
+PASS bar({f:"blah443"}, {f:"blah557"}) is 13
+PASS foo({f:"blah444"}, {f:"blah556"}) is [14, false]
+PASS bar({f:"blah444"}, {f:"blah556"}) is 13
+PASS foo({f:"blah445"}, {f:"blah555"}) is [14, false]
+PASS bar({f:"blah445"}, {f:"blah555"}) is 13
+PASS foo({f:"blah446"}, {f:"blah554"}) is [14, false]
+PASS bar({f:"blah446"}, {f:"blah554"}) is 13
+PASS foo({f:"blah447"}, {f:"blah553"}) is [14, false]
+PASS bar({f:"blah447"}, {f:"blah553"}) is 13
+PASS foo({f:"blah448"}, {f:"blah552"}) is [14, false]
+PASS bar({f:"blah448"}, {f:"blah552"}) is 13
+PASS foo({f:"blah449"}, {f:"blah551"}) is [14, false]
+PASS bar({f:"blah449"}, {f:"blah551"}) is 13
+PASS foo({f:"blah450"}, {f:"blah550"}) is [14, false]
+PASS bar({f:"blah450"}, {f:"blah550"}) is 13
+PASS foo({f:"blah451"}, {f:"blah549"}) is [14, false]
+PASS bar({f:"blah451"}, {f:"blah549"}) is 13
+PASS foo({f:"blah452"}, {f:"blah548"}) is [14, false]
+PASS bar({f:"blah452"}, {f:"blah548"}) is 13
+PASS foo({f:"blah453"}, {f:"blah547"}) is [14, false]
+PASS bar({f:"blah453"}, {f:"blah547"}) is 13
+PASS foo({f:"blah454"}, {f:"blah546"}) is [14, false]
+PASS bar({f:"blah454"}, {f:"blah546"}) is 13
+PASS foo({f:"blah455"}, {f:"blah545"}) is [14, false]
+PASS bar({f:"blah455"}, {f:"blah545"}) is 13
+PASS foo({f:"blah456"}, {f:"blah544"}) is [14, false]
+PASS bar({f:"blah456"}, {f:"blah544"}) is 13
+PASS foo({f:"blah457"}, {f:"blah543"}) is [14, false]
+PASS bar({f:"blah457"}, {f:"blah543"}) is 13
+PASS foo({f:"blah458"}, {f:"blah542"}) is [14, false]
+PASS bar({f:"blah458"}, {f:"blah542"}) is 13
+PASS foo({f:"blah459"}, {f:"blah541"}) is [14, false]
+PASS bar({f:"blah459"}, {f:"blah541"}) is 13
+PASS foo({f:"blah460"}, {f:"blah540"}) is [14, false]
+PASS bar({f:"blah460"}, {f:"blah540"}) is 13
+PASS foo({f:"blah461"}, {f:"blah539"}) is [14, false]
+PASS bar({f:"blah461"}, {f:"blah539"}) is 13
+PASS foo({f:"blah462"}, {f:"blah538"}) is [14, false]
+PASS bar({f:"blah462"}, {f:"blah538"}) is 13
+PASS foo({f:"blah463"}, {f:"blah537"}) is [14, false]
+PASS bar({f:"blah463"}, {f:"blah537"}) is 13
+PASS foo({f:"blah464"}, {f:"blah536"}) is [14, false]
+PASS bar({f:"blah464"}, {f:"blah536"}) is 13
+PASS foo({f:"blah465"}, {f:"blah535"}) is [14, false]
+PASS bar({f:"blah465"}, {f:"blah535"}) is 13
+PASS foo({f:"blah466"}, {f:"blah534"}) is [14, false]
+PASS bar({f:"blah466"}, {f:"blah534"}) is 13
+PASS foo({f:"blah467"}, {f:"blah533"}) is [14, false]
+PASS bar({f:"blah467"}, {f:"blah533"}) is 13
+PASS foo({f:"blah468"}, {f:"blah532"}) is [14, false]
+PASS bar({f:"blah468"}, {f:"blah532"}) is 13
+PASS foo({f:"blah469"}, {f:"blah531"}) is [14, false]
+PASS bar({f:"blah469"}, {f:"blah531"}) is 13
+PASS foo({f:"blah470"}, {f:"blah530"}) is [14, false]
+PASS bar({f:"blah470"}, {f:"blah530"}) is 13
+PASS foo({f:"blah471"}, {f:"blah529"}) is [14, false]
+PASS bar({f:"blah471"}, {f:"blah529"}) is 13
+PASS foo({f:"blah472"}, {f:"blah528"}) is [14, false]
+PASS bar({f:"blah472"}, {f:"blah528"}) is 13
+PASS foo({f:"blah473"}, {f:"blah527"}) is [14, false]
+PASS bar({f:"blah473"}, {f:"blah527"}) is 13
+PASS foo({f:"blah474"}, {f:"blah526"}) is [14, false]
+PASS bar({f:"blah474"}, {f:"blah526"}) is 13
+PASS foo({f:"blah475"}, {f:"blah525"}) is [14, false]
+PASS bar({f:"blah475"}, {f:"blah525"}) is 13
+PASS foo({f:"blah476"}, {f:"blah524"}) is [14, false]
+PASS bar({f:"blah476"}, {f:"blah524"}) is 13
+PASS foo({f:"blah477"}, {f:"blah523"}) is [14, false]
+PASS bar({f:"blah477"}, {f:"blah523"}) is 13
+PASS foo({f:"blah478"}, {f:"blah522"}) is [14, false]
+PASS bar({f:"blah478"}, {f:"blah522"}) is 13
+PASS foo({f:"blah479"}, {f:"blah521"}) is [14, false]
+PASS bar({f:"blah479"}, {f:"blah521"}) is 13
+PASS foo({f:"blah480"}, {f:"blah520"}) is [14, false]
+PASS bar({f:"blah480"}, {f:"blah520"}) is 13
+PASS foo({f:"blah481"}, {f:"blah519"}) is [14, false]
+PASS bar({f:"blah481"}, {f:"blah519"}) is 13
+PASS foo({f:"blah482"}, {f:"blah518"}) is [14, false]
+PASS bar({f:"blah482"}, {f:"blah518"}) is 13
+PASS foo({f:"blah483"}, {f:"blah517"}) is [14, false]
+PASS bar({f:"blah483"}, {f:"blah517"}) is 13
+PASS foo({f:"blah484"}, {f:"blah516"}) is [14, false]
+PASS bar({f:"blah484"}, {f:"blah516"}) is 13
+PASS foo({f:"blah485"}, {f:"blah515"}) is [14, false]
+PASS bar({f:"blah485"}, {f:"blah515"}) is 13
+PASS foo({f:"blah486"}, {f:"blah514"}) is [14, false]
+PASS bar({f:"blah486"}, {f:"blah514"}) is 13
+PASS foo({f:"blah487"}, {f:"blah513"}) is [14, false]
+PASS bar({f:"blah487"}, {f:"blah513"}) is 13
+PASS foo({f:"blah488"}, {f:"blah512"}) is [14, false]
+PASS bar({f:"blah488"}, {f:"blah512"}) is 13
+PASS foo({f:"blah489"}, {f:"blah511"}) is [14, false]
+PASS bar({f:"blah489"}, {f:"blah511"}) is 13
+PASS foo({f:"blah490"}, {f:"blah510"}) is [14, false]
+PASS bar({f:"blah490"}, {f:"blah510"}) is 13
+PASS foo({f:"blah491"}, {f:"blah509"}) is [14, false]
+PASS bar({f:"blah491"}, {f:"blah509"}) is 13
+PASS foo({f:"blah492"}, {f:"blah508"}) is [14, false]
+PASS bar({f:"blah492"}, {f:"blah508"}) is 13
+PASS foo({f:"blah493"}, {f:"blah507"}) is [14, false]
+PASS bar({f:"blah493"}, {f:"blah507"}) is 13
+PASS foo({f:"blah494"}, {f:"blah506"}) is [14, false]
+PASS bar({f:"blah494"}, {f:"blah506"}) is 13
+PASS foo({f:"blah495"}, {f:"blah505"}) is [14, false]
+PASS bar({f:"blah495"}, {f:"blah505"}) is 13
+PASS foo({f:"blah496"}, {f:"blah504"}) is [14, false]
+PASS bar({f:"blah496"}, {f:"blah504"}) is 13
+PASS foo({f:"blah497"}, {f:"blah503"}) is [14, false]
+PASS bar({f:"blah497"}, {f:"blah503"}) is 13
+PASS foo({f:"blah498"}, {f:"blah502"}) is [14, false]
+PASS bar({f:"blah498"}, {f:"blah502"}) is 13
+PASS foo({f:"blah499"}, {f:"blah501"}) is [14, false]
+PASS bar({f:"blah499"}, {f:"blah501"}) is 13
+PASS foo({f:"blah500"}, {f:"blah500"}) is [14, true]
+PASS bar({f:"blah500"}, {f:"blah500"}) is 15
+PASS foo({f:"blah501"}, {f:"blah499"}) is [14, false]
+PASS bar({f:"blah501"}, {f:"blah499"}) is 13
+PASS foo({f:"blah502"}, {f:"blah498"}) is [14, false]
+PASS bar({f:"blah502"}, {f:"blah498"}) is 13
+PASS foo({f:"blah503"}, {f:"blah497"}) is [14, false]
+PASS bar({f:"blah503"}, {f:"blah497"}) is 13
+PASS foo({f:"blah504"}, {f:"blah496"}) is [14, false]
+PASS bar({f:"blah504"}, {f:"blah496"}) is 13
+PASS foo({f:"blah505"}, {f:"blah495"}) is [14, false]
+PASS bar({f:"blah505"}, {f:"blah495"}) is 13
+PASS foo({f:"blah506"}, {f:"blah494"}) is [14, false]
+PASS bar({f:"blah506"}, {f:"blah494"}) is 13
+PASS foo({f:"blah507"}, {f:"blah493"}) is [14, false]
+PASS bar({f:"blah507"}, {f:"blah493"}) is 13
+PASS foo({f:"blah508"}, {f:"blah492"}) is [14, false]
+PASS bar({f:"blah508"}, {f:"blah492"}) is 13
+PASS foo({f:"blah509"}, {f:"blah491"}) is [14, false]
+PASS bar({f:"blah509"}, {f:"blah491"}) is 13
+PASS foo({f:"blah510"}, {f:"blah490"}) is [14, false]
+PASS bar({f:"blah510"}, {f:"blah490"}) is 13
+PASS foo({f:"blah511"}, {f:"blah489"}) is [14, false]
+PASS bar({f:"blah511"}, {f:"blah489"}) is 13
+PASS foo({f:"blah512"}, {f:"blah488"}) is [14, false]
+PASS bar({f:"blah512"}, {f:"blah488"}) is 13
+PASS foo({f:"blah513"}, {f:"blah487"}) is [14, false]
+PASS bar({f:"blah513"}, {f:"blah487"}) is 13
+PASS foo({f:"blah514"}, {f:"blah486"}) is [14, false]
+PASS bar({f:"blah514"}, {f:"blah486"}) is 13
+PASS foo({f:"blah515"}, {f:"blah485"}) is [14, false]
+PASS bar({f:"blah515"}, {f:"blah485"}) is 13
+PASS foo({f:"blah516"}, {f:"blah484"}) is [14, false]
+PASS bar({f:"blah516"}, {f:"blah484"}) is 13
+PASS foo({f:"blah517"}, {f:"blah483"}) is [14, false]
+PASS bar({f:"blah517"}, {f:"blah483"}) is 13
+PASS foo({f:"blah518"}, {f:"blah482"}) is [14, false]
+PASS bar({f:"blah518"}, {f:"blah482"}) is 13
+PASS foo({f:"blah519"}, {f:"blah481"}) is [14, false]
+PASS bar({f:"blah519"}, {f:"blah481"}) is 13
+PASS foo({f:"blah520"}, {f:"blah480"}) is [14, false]
+PASS bar({f:"blah520"}, {f:"blah480"}) is 13
+PASS foo({f:"blah521"}, {f:"blah479"}) is [14, false]
+PASS bar({f:"blah521"}, {f:"blah479"}) is 13
+PASS foo({f:"blah522"}, {f:"blah478"}) is [14, false]
+PASS bar({f:"blah522"}, {f:"blah478"}) is 13
+PASS foo({f:"blah523"}, {f:"blah477"}) is [14, false]
+PASS bar({f:"blah523"}, {f:"blah477"}) is 13
+PASS foo({f:"blah524"}, {f:"blah476"}) is [14, false]
+PASS bar({f:"blah524"}, {f:"blah476"}) is 13
+PASS foo({f:"blah525"}, {f:"blah475"}) is [14, false]
+PASS bar({f:"blah525"}, {f:"blah475"}) is 13
+PASS foo({f:"blah526"}, {f:"blah474"}) is [14, false]
+PASS bar({f:"blah526"}, {f:"blah474"}) is 13
+PASS foo({f:"blah527"}, {f:"blah473"}) is [14, false]
+PASS bar({f:"blah527"}, {f:"blah473"}) is 13
+PASS foo({f:"blah528"}, {f:"blah472"}) is [14, false]
+PASS bar({f:"blah528"}, {f:"blah472"}) is 13
+PASS foo({f:"blah529"}, {f:"blah471"}) is [14, false]
+PASS bar({f:"blah529"}, {f:"blah471"}) is 13
+PASS foo({f:"blah530"}, {f:"blah470"}) is [14, false]
+PASS bar({f:"blah530"}, {f:"blah470"}) is 13
+PASS foo({f:"blah531"}, {f:"blah469"}) is [14, false]
+PASS bar({f:"blah531"}, {f:"blah469"}) is 13
+PASS foo({f:"blah532"}, {f:"blah468"}) is [14, false]
+PASS bar({f:"blah532"}, {f:"blah468"}) is 13
+PASS foo({f:"blah533"}, {f:"blah467"}) is [14, false]
+PASS bar({f:"blah533"}, {f:"blah467"}) is 13
+PASS foo({f:"blah534"}, {f:"blah466"}) is [14, false]
+PASS bar({f:"blah534"}, {f:"blah466"}) is 13
+PASS foo({f:"blah535"}, {f:"blah465"}) is [14, false]
+PASS bar({f:"blah535"}, {f:"blah465"}) is 13
+PASS foo({f:"blah536"}, {f:"blah464"}) is [14, false]
+PASS bar({f:"blah536"}, {f:"blah464"}) is 13
+PASS foo({f:"blah537"}, {f:"blah463"}) is [14, false]
+PASS bar({f:"blah537"}, {f:"blah463"}) is 13
+PASS foo({f:"blah538"}, {f:"blah462"}) is [14, false]
+PASS bar({f:"blah538"}, {f:"blah462"}) is 13
+PASS foo({f:"blah539"}, {f:"blah461"}) is [14, false]
+PASS bar({f:"blah539"}, {f:"blah461"}) is 13
+PASS foo({f:"blah540"}, {f:"blah460"}) is [14, false]
+PASS bar({f:"blah540"}, {f:"blah460"}) is 13
+PASS foo({f:"blah541"}, {f:"blah459"}) is [14, false]
+PASS bar({f:"blah541"}, {f:"blah459"}) is 13
+PASS foo({f:"blah542"}, {f:"blah458"}) is [14, false]
+PASS bar({f:"blah542"}, {f:"blah458"}) is 13
+PASS foo({f:"blah543"}, {f:"blah457"}) is [14, false]
+PASS bar({f:"blah543"}, {f:"blah457"}) is 13
+PASS foo({f:"blah544"}, {f:"blah456"}) is [14, false]
+PASS bar({f:"blah544"}, {f:"blah456"}) is 13
+PASS foo({f:"blah545"}, {f:"blah455"}) is [14, false]
+PASS bar({f:"blah545"}, {f:"blah455"}) is 13
+PASS foo({f:"blah546"}, {f:"blah454"}) is [14, false]
+PASS bar({f:"blah546"}, {f:"blah454"}) is 13
+PASS foo({f:"blah547"}, {f:"blah453"}) is [14, false]
+PASS bar({f:"blah547"}, {f:"blah453"}) is 13
+PASS foo({f:"blah548"}, {f:"blah452"}) is [14, false]
+PASS bar({f:"blah548"}, {f:"blah452"}) is 13
+PASS foo({f:"blah549"}, {f:"blah451"}) is [14, false]
+PASS bar({f:"blah549"}, {f:"blah451"}) is 13
+PASS foo({f:"blah550"}, {f:"blah450"}) is [14, false]
+PASS bar({f:"blah550"}, {f:"blah450"}) is 13
+PASS foo({f:"blah551"}, {f:"blah449"}) is [14, false]
+PASS bar({f:"blah551"}, {f:"blah449"}) is 13
+PASS foo({f:"blah552"}, {f:"blah448"}) is [14, false]
+PASS bar({f:"blah552"}, {f:"blah448"}) is 13
+PASS foo({f:"blah553"}, {f:"blah447"}) is [14, false]
+PASS bar({f:"blah553"}, {f:"blah447"}) is 13
+PASS foo({f:"blah554"}, {f:"blah446"}) is [14, false]
+PASS bar({f:"blah554"}, {f:"blah446"}) is 13
+PASS foo({f:"blah555"}, {f:"blah445"}) is [14, false]
+PASS bar({f:"blah555"}, {f:"blah445"}) is 13
+PASS foo({f:"blah556"}, {f:"blah444"}) is [14, false]
+PASS bar({f:"blah556"}, {f:"blah444"}) is 13
+PASS foo({f:"blah557"}, {f:"blah443"}) is [14, false]
+PASS bar({f:"blah557"}, {f:"blah443"}) is 13
+PASS foo({f:"blah558"}, {f:"blah442"}) is [14, false]
+PASS bar({f:"blah558"}, {f:"blah442"}) is 13
+PASS foo({f:"blah559"}, {f:"blah441"}) is [14, false]
+PASS bar({f:"blah559"}, {f:"blah441"}) is 13
+PASS foo({f:"blah560"}, {f:"blah440"}) is [14, false]
+PASS bar({f:"blah560"}, {f:"blah440"}) is 13
+PASS foo({f:"blah561"}, {f:"blah439"}) is [14, false]
+PASS bar({f:"blah561"}, {f:"blah439"}) is 13
+PASS foo({f:"blah562"}, {f:"blah438"}) is [14, false]
+PASS bar({f:"blah562"}, {f:"blah438"}) is 13
+PASS foo({f:"blah563"}, {f:"blah437"}) is [14, false]
+PASS bar({f:"blah563"}, {f:"blah437"}) is 13
+PASS foo({f:"blah564"}, {f:"blah436"}) is [14, false]
+PASS bar({f:"blah564"}, {f:"blah436"}) is 13
+PASS foo({f:"blah565"}, {f:"blah435"}) is [14, false]
+PASS bar({f:"blah565"}, {f:"blah435"}) is 13
+PASS foo({f:"blah566"}, {f:"blah434"}) is [14, false]
+PASS bar({f:"blah566"}, {f:"blah434"}) is 13
+PASS foo({f:"blah567"}, {f:"blah433"}) is [14, false]
+PASS bar({f:"blah567"}, {f:"blah433"}) is 13
+PASS foo({f:"blah568"}, {f:"blah432"}) is [14, false]
+PASS bar({f:"blah568"}, {f:"blah432"}) is 13
+PASS foo({f:"blah569"}, {f:"blah431"}) is [14, false]
+PASS bar({f:"blah569"}, {f:"blah431"}) is 13
+PASS foo({f:"blah570"}, {f:"blah430"}) is [14, false]
+PASS bar({f:"blah570"}, {f:"blah430"}) is 13
+PASS foo({f:"blah571"}, {f:"blah429"}) is [14, false]
+PASS bar({f:"blah571"}, {f:"blah429"}) is 13
+PASS foo({f:"blah572"}, {f:"blah428"}) is [14, false]
+PASS bar({f:"blah572"}, {f:"blah428"}) is 13
+PASS foo({f:"blah573"}, {f:"blah427"}) is [14, false]
+PASS bar({f:"blah573"}, {f:"blah427"}) is 13
+PASS foo({f:"blah574"}, {f:"blah426"}) is [14, false]
+PASS bar({f:"blah574"}, {f:"blah426"}) is 13
+PASS foo({f:"blah575"}, {f:"blah425"}) is [14, false]
+PASS bar({f:"blah575"}, {f:"blah425"}) is 13
+PASS foo({f:"blah576"}, {f:"blah424"}) is [14, false]
+PASS bar({f:"blah576"}, {f:"blah424"}) is 13
+PASS foo({f:"blah577"}, {f:"blah423"}) is [14, false]
+PASS bar({f:"blah577"}, {f:"blah423"}) is 13
+PASS foo({f:"blah578"}, {f:"blah422"}) is [14, false]
+PASS bar({f:"blah578"}, {f:"blah422"}) is 13
+PASS foo({f:"blah579"}, {f:"blah421"}) is [14, false]
+PASS bar({f:"blah579"}, {f:"blah421"}) is 13
+PASS foo({f:"blah580"}, {f:"blah420"}) is [14, false]
+PASS bar({f:"blah580"}, {f:"blah420"}) is 13
+PASS foo({f:"blah581"}, {f:"blah419"}) is [14, false]
+PASS bar({f:"blah581"}, {f:"blah419"}) is 13
+PASS foo({f:"blah582"}, {f:"blah418"}) is [14, false]
+PASS bar({f:"blah582"}, {f:"blah418"}) is 13
+PASS foo({f:"blah583"}, {f:"blah417"}) is [14, false]
+PASS bar({f:"blah583"}, {f:"blah417"}) is 13
+PASS foo({f:"blah584"}, {f:"blah416"}) is [14, false]
+PASS bar({f:"blah584"}, {f:"blah416"}) is 13
+PASS foo({f:"blah585"}, {f:"blah415"}) is [14, false]
+PASS bar({f:"blah585"}, {f:"blah415"}) is 13
+PASS foo({f:"blah586"}, {f:"blah414"}) is [14, false]
+PASS bar({f:"blah586"}, {f:"blah414"}) is 13
+PASS foo({f:"blah587"}, {f:"blah413"}) is [14, false]
+PASS bar({f:"blah587"}, {f:"blah413"}) is 13
+PASS foo({f:"blah588"}, {f:"blah412"}) is [14, false]
+PASS bar({f:"blah588"}, {f:"blah412"}) is 13
+PASS foo({f:"blah589"}, {f:"blah411"}) is [14, false]
+PASS bar({f:"blah589"}, {f:"blah411"}) is 13
+PASS foo({f:"blah590"}, {f:"blah410"}) is [14, false]
+PASS bar({f:"blah590"}, {f:"blah410"}) is 13
+PASS foo({f:"blah591"}, {f:"blah409"}) is [14, false]
+PASS bar({f:"blah591"}, {f:"blah409"}) is 13
+PASS foo({f:"blah592"}, {f:"blah408"}) is [14, false]
+PASS bar({f:"blah592"}, {f:"blah408"}) is 13
+PASS foo({f:"blah593"}, {f:"blah407"}) is [14, false]
+PASS bar({f:"blah593"}, {f:"blah407"}) is 13
+PASS foo({f:"blah594"}, {f:"blah406"}) is [14, false]
+PASS bar({f:"blah594"}, {f:"blah406"}) is 13
+PASS foo({f:"blah595"}, {f:"blah405"}) is [14, false]
+PASS bar({f:"blah595"}, {f:"blah405"}) is 13
+PASS foo({f:"blah596"}, {f:"blah404"}) is [14, false]
+PASS bar({f:"blah596"}, {f:"blah404"}) is 13
+PASS foo({f:"blah597"}, {f:"blah403"}) is [14, false]
+PASS bar({f:"blah597"}, {f:"blah403"}) is 13
+PASS foo({f:"blah598"}, {f:"blah402"}) is [14, false]
+PASS bar({f:"blah598"}, {f:"blah402"}) is 13
+PASS foo({f:"blah599"}, {f:"blah401"}) is [14, false]
+PASS bar({f:"blah599"}, {f:"blah401"}) is 13
+PASS foo({f:"blah600"}, {f:"blah400"}) is [14, false]
+PASS bar({f:"blah600"}, {f:"blah400"}) is 13
+PASS foo({f:"blah601"}, {f:"blah399"}) is [14, false]
+PASS bar({f:"blah601"}, {f:"blah399"}) is 13
+PASS foo({f:"blah602"}, {f:"blah398"}) is [14, false]
+PASS bar({f:"blah602"}, {f:"blah398"}) is 13
+PASS foo({f:"blah603"}, {f:"blah397"}) is [14, false]
+PASS bar({f:"blah603"}, {f:"blah397"}) is 13
+PASS foo({f:"blah604"}, {f:"blah396"}) is [14, false]
+PASS bar({f:"blah604"}, {f:"blah396"}) is 13
+PASS foo({f:"blah605"}, {f:"blah395"}) is [14, false]
+PASS bar({f:"blah605"}, {f:"blah395"}) is 13
+PASS foo({f:"blah606"}, {f:"blah394"}) is [14, false]
+PASS bar({f:"blah606"}, {f:"blah394"}) is 13
+PASS foo({f:"blah607"}, {f:"blah393"}) is [14, false]
+PASS bar({f:"blah607"}, {f:"blah393"}) is 13
+PASS foo({f:"blah608"}, {f:"blah392"}) is [14, false]
+PASS bar({f:"blah608"}, {f:"blah392"}) is 13
+PASS foo({f:"blah609"}, {f:"blah391"}) is [14, false]
+PASS bar({f:"blah609"}, {f:"blah391"}) is 13
+PASS foo({f:"blah610"}, {f:"blah390"}) is [14, false]
+PASS bar({f:"blah610"}, {f:"blah390"}) is 13
+PASS foo({f:"blah611"}, {f:"blah389"}) is [14, false]
+PASS bar({f:"blah611"}, {f:"blah389"}) is 13
+PASS foo({f:"blah612"}, {f:"blah388"}) is [14, false]
+PASS bar({f:"blah612"}, {f:"blah388"}) is 13
+PASS foo({f:"blah613"}, {f:"blah387"}) is [14, false]
+PASS bar({f:"blah613"}, {f:"blah387"}) is 13
+PASS foo({f:"blah614"}, {f:"blah386"}) is [14, false]
+PASS bar({f:"blah614"}, {f:"blah386"}) is 13
+PASS foo({f:"blah615"}, {f:"blah385"}) is [14, false]
+PASS bar({f:"blah615"}, {f:"blah385"}) is 13
+PASS foo({f:"blah616"}, {f:"blah384"}) is [14, false]
+PASS bar({f:"blah616"}, {f:"blah384"}) is 13
+PASS foo({f:"blah617"}, {f:"blah383"}) is [14, false]
+PASS bar({f:"blah617"}, {f:"blah383"}) is 13
+PASS foo({f:"blah618"}, {f:"blah382"}) is [14, false]
+PASS bar({f:"blah618"}, {f:"blah382"}) is 13
+PASS foo({f:"blah619"}, {f:"blah381"}) is [14, false]
+PASS bar({f:"blah619"}, {f:"blah381"}) is 13
+PASS foo({f:"blah620"}, {f:"blah380"}) is [14, false]
+PASS bar({f:"blah620"}, {f:"blah380"}) is 13
+PASS foo({f:"blah621"}, {f:"blah379"}) is [14, false]
+PASS bar({f:"blah621"}, {f:"blah379"}) is 13
+PASS foo({f:"blah622"}, {f:"blah378"}) is [14, false]
+PASS bar({f:"blah622"}, {f:"blah378"}) is 13
+PASS foo({f:"blah623"}, {f:"blah377"}) is [14, false]
+PASS bar({f:"blah623"}, {f:"blah377"}) is 13
+PASS foo({f:"blah624"}, {f:"blah376"}) is [14, false]
+PASS bar({f:"blah624"}, {f:"blah376"}) is 13
+PASS foo({f:"blah625"}, {f:"blah375"}) is [14, false]
+PASS bar({f:"blah625"}, {f:"blah375"}) is 13
+PASS foo({f:"blah626"}, {f:"blah374"}) is [14, false]
+PASS bar({f:"blah626"}, {f:"blah374"}) is 13
+PASS foo({f:"blah627"}, {f:"blah373"}) is [14, false]
+PASS bar({f:"blah627"}, {f:"blah373"}) is 13
+PASS foo({f:"blah628"}, {f:"blah372"}) is [14, false]
+PASS bar({f:"blah628"}, {f:"blah372"}) is 13
+PASS foo({f:"blah629"}, {f:"blah371"}) is [14, false]
+PASS bar({f:"blah629"}, {f:"blah371"}) is 13
+PASS foo({f:"blah630"}, {f:"blah370"}) is [14, false]
+PASS bar({f:"blah630"}, {f:"blah370"}) is 13
+PASS foo({f:"blah631"}, {f:"blah369"}) is [14, false]
+PASS bar({f:"blah631"}, {f:"blah369"}) is 13
+PASS foo({f:"blah632"}, {f:"blah368"}) is [14, false]
+PASS bar({f:"blah632"}, {f:"blah368"}) is 13
+PASS foo({f:"blah633"}, {f:"blah367"}) is [14, false]
+PASS bar({f:"blah633"}, {f:"blah367"}) is 13
+PASS foo({f:"blah634"}, {f:"blah366"}) is [14, false]
+PASS bar({f:"blah634"}, {f:"blah366"}) is 13
+PASS foo({f:"blah635"}, {f:"blah365"}) is [14, false]
+PASS bar({f:"blah635"}, {f:"blah365"}) is 13
+PASS foo({f:"blah636"}, {f:"blah364"}) is [14, false]
+PASS bar({f:"blah636"}, {f:"blah364"}) is 13
+PASS foo({f:"blah637"}, {f:"blah363"}) is [14, false]
+PASS bar({f:"blah637"}, {f:"blah363"}) is 13
+PASS foo({f:"blah638"}, {f:"blah362"}) is [14, false]
+PASS bar({f:"blah638"}, {f:"blah362"}) is 13
+PASS foo({f:"blah639"}, {f:"blah361"}) is [14, false]
+PASS bar({f:"blah639"}, {f:"blah361"}) is 13
+PASS foo({f:"blah640"}, {f:"blah360"}) is [14, false]
+PASS bar({f:"blah640"}, {f:"blah360"}) is 13
+PASS foo({f:"blah641"}, {f:"blah359"}) is [14, false]
+PASS bar({f:"blah641"}, {f:"blah359"}) is 13
+PASS foo({f:"blah642"}, {f:"blah358"}) is [14, false]
+PASS bar({f:"blah642"}, {f:"blah358"}) is 13
+PASS foo({f:"blah643"}, {f:"blah357"}) is [14, false]
+PASS bar({f:"blah643"}, {f:"blah357"}) is 13
+PASS foo({f:"blah644"}, {f:"blah356"}) is [14, false]
+PASS bar({f:"blah644"}, {f:"blah356"}) is 13
+PASS foo({f:"blah645"}, {f:"blah355"}) is [14, false]
+PASS bar({f:"blah645"}, {f:"blah355"}) is 13
+PASS foo({f:"blah646"}, {f:"blah354"}) is [14, false]
+PASS bar({f:"blah646"}, {f:"blah354"}) is 13
+PASS foo({f:"blah647"}, {f:"blah353"}) is [14, false]
+PASS bar({f:"blah647"}, {f:"blah353"}) is 13
+PASS foo({f:"blah648"}, {f:"blah352"}) is [14, false]
+PASS bar({f:"blah648"}, {f:"blah352"}) is 13
+PASS foo({f:"blah649"}, {f:"blah351"}) is [14, false]
+PASS bar({f:"blah649"}, {f:"blah351"}) is 13
+PASS foo({f:"blah650"}, {f:"blah350"}) is [14, false]
+PASS bar({f:"blah650"}, {f:"blah350"}) is 13
+PASS foo({f:"blah651"}, {f:"blah349"}) is [14, false]
+PASS bar({f:"blah651"}, {f:"blah349"}) is 13
+PASS foo({f:"blah652"}, {f:"blah348"}) is [14, false]
+PASS bar({f:"blah652"}, {f:"blah348"}) is 13
+PASS foo({f:"blah653"}, {f:"blah347"}) is [14, false]
+PASS bar({f:"blah653"}, {f:"blah347"}) is 13
+PASS foo({f:"blah654"}, {f:"blah346"}) is [14, false]
+PASS bar({f:"blah654"}, {f:"blah346"}) is 13
+PASS foo({f:"blah655"}, {f:"blah345"}) is [14, false]
+PASS bar({f:"blah655"}, {f:"blah345"}) is 13
+PASS foo({f:"blah656"}, {f:"blah344"}) is [14, false]
+PASS bar({f:"blah656"}, {f:"blah344"}) is 13
+PASS foo({f:"blah657"}, {f:"blah343"}) is [14, false]
+PASS bar({f:"blah657"}, {f:"blah343"}) is 13
+PASS foo({f:"blah658"}, {f:"blah342"}) is [14, false]
+PASS bar({f:"blah658"}, {f:"blah342"}) is 13
+PASS foo({f:"blah659"}, {f:"blah341"}) is [14, false]
+PASS bar({f:"blah659"}, {f:"blah341"}) is 13
+PASS foo({f:"blah660"}, {f:"blah340"}) is [14, false]
+PASS bar({f:"blah660"}, {f:"blah340"}) is 13
+PASS foo({f:"blah661"}, {f:"blah339"}) is [14, false]
+PASS bar({f:"blah661"}, {f:"blah339"}) is 13
+PASS foo({f:"blah662"}, {f:"blah338"}) is [14, false]
+PASS bar({f:"blah662"}, {f:"blah338"}) is 13
+PASS foo({f:"blah663"}, {f:"blah337"}) is [14, false]
+PASS bar({f:"blah663"}, {f:"blah337"}) is 13
+PASS foo({f:"blah664"}, {f:"blah336"}) is [14, false]
+PASS bar({f:"blah664"}, {f:"blah336"}) is 13
+PASS foo({f:"blah665"}, {f:"blah335"}) is [14, false]
+PASS bar({f:"blah665"}, {f:"blah335"}) is 13
+PASS foo({f:"blah666"}, {f:"blah334"}) is [14, false]
+PASS bar({f:"blah666"}, {f:"blah334"}) is 13
+PASS foo({f:"blah667"}, {f:"blah333"}) is [14, false]
+PASS bar({f:"blah667"}, {f:"blah333"}) is 13
+PASS foo({f:"blah668"}, {f:"blah332"}) is [14, false]
+PASS bar({f:"blah668"}, {f:"blah332"}) is 13
+PASS foo({f:"blah669"}, {f:"blah331"}) is [14, false]
+PASS bar({f:"blah669"}, {f:"blah331"}) is 13
+PASS foo({f:"blah670"}, {f:"blah330"}) is [14, false]
+PASS bar({f:"blah670"}, {f:"blah330"}) is 13
+PASS foo({f:"blah671"}, {f:"blah329"}) is [14, false]
+PASS bar({f:"blah671"}, {f:"blah329"}) is 13
+PASS foo({f:"blah672"}, {f:"blah328"}) is [14, false]
+PASS bar({f:"blah672"}, {f:"blah328"}) is 13
+PASS foo({f:"blah673"}, {f:"blah327"}) is [14, false]
+PASS bar({f:"blah673"}, {f:"blah327"}) is 13
+PASS foo({f:"blah674"}, {f:"blah326"}) is [14, false]
+PASS bar({f:"blah674"}, {f:"blah326"}) is 13
+PASS foo({f:"blah675"}, {f:"blah325"}) is [14, false]
+PASS bar({f:"blah675"}, {f:"blah325"}) is 13
+PASS foo({f:"blah676"}, {f:"blah324"}) is [14, false]
+PASS bar({f:"blah676"}, {f:"blah324"}) is 13
+PASS foo({f:"blah677"}, {f:"blah323"}) is [14, false]
+PASS bar({f:"blah677"}, {f:"blah323"}) is 13
+PASS foo({f:"blah678"}, {f:"blah322"}) is [14, false]
+PASS bar({f:"blah678"}, {f:"blah322"}) is 13
+PASS foo({f:"blah679"}, {f:"blah321"}) is [14, false]
+PASS bar({f:"blah679"}, {f:"blah321"}) is 13
+PASS foo({f:"blah680"}, {f:"blah320"}) is [14, false]
+PASS bar({f:"blah680"}, {f:"blah320"}) is 13
+PASS foo({f:"blah681"}, {f:"blah319"}) is [14, false]
+PASS bar({f:"blah681"}, {f:"blah319"}) is 13
+PASS foo({f:"blah682"}, {f:"blah318"}) is [14, false]
+PASS bar({f:"blah682"}, {f:"blah318"}) is 13
+PASS foo({f:"blah683"}, {f:"blah317"}) is [14, false]
+PASS bar({f:"blah683"}, {f:"blah317"}) is 13
+PASS foo({f:"blah684"}, {f:"blah316"}) is [14, false]
+PASS bar({f:"blah684"}, {f:"blah316"}) is 13
+PASS foo({f:"blah685"}, {f:"blah315"}) is [14, false]
+PASS bar({f:"blah685"}, {f:"blah315"}) is 13
+PASS foo({f:"blah686"}, {f:"blah314"}) is [14, false]
+PASS bar({f:"blah686"}, {f:"blah314"}) is 13
+PASS foo({f:"blah687"}, {f:"blah313"}) is [14, false]
+PASS bar({f:"blah687"}, {f:"blah313"}) is 13
+PASS foo({f:"blah688"}, {f:"blah312"}) is [14, false]
+PASS bar({f:"blah688"}, {f:"blah312"}) is 13
+PASS foo({f:"blah689"}, {f:"blah311"}) is [14, false]
+PASS bar({f:"blah689"}, {f:"blah311"}) is 13
+PASS foo({f:"blah690"}, {f:"blah310"}) is [14, false]
+PASS bar({f:"blah690"}, {f:"blah310"}) is 13
+PASS foo({f:"blah691"}, {f:"blah309"}) is [14, false]
+PASS bar({f:"blah691"}, {f:"blah309"}) is 13
+PASS foo({f:"blah692"}, {f:"blah308"}) is [14, false]
+PASS bar({f:"blah692"}, {f:"blah308"}) is 13
+PASS foo({f:"blah693"}, {f:"blah307"}) is [14, false]
+PASS bar({f:"blah693"}, {f:"blah307"}) is 13
+PASS foo({f:"blah694"}, {f:"blah306"}) is [14, false]
+PASS bar({f:"blah694"}, {f:"blah306"}) is 13
+PASS foo({f:"blah695"}, {f:"blah305"}) is [14, false]
+PASS bar({f:"blah695"}, {f:"blah305"}) is 13
+PASS foo({f:"blah696"}, {f:"blah304"}) is [14, false]
+PASS bar({f:"blah696"}, {f:"blah304"}) is 13
+PASS foo({f:"blah697"}, {f:"blah303"}) is [14, false]
+PASS bar({f:"blah697"}, {f:"blah303"}) is 13
+PASS foo({f:"blah698"}, {f:"blah302"}) is [14, false]
+PASS bar({f:"blah698"}, {f:"blah302"}) is 13
+PASS foo({f:"blah699"}, {f:"blah301"}) is [14, false]
+PASS bar({f:"blah699"}, {f:"blah301"}) is 13
+PASS foo({f:"blah700"}, {f:"blah300"}) is [14, false]
+PASS bar({f:"blah700"}, {f:"blah300"}) is 13
+PASS foo({f:"blah701"}, {f:"blah299"}) is [14, false]
+PASS bar({f:"blah701"}, {f:"blah299"}) is 13
+PASS foo({f:"blah702"}, {f:"blah298"}) is [14, false]
+PASS bar({f:"blah702"}, {f:"blah298"}) is 13
+PASS foo({f:"blah703"}, {f:"blah297"}) is [14, false]
+PASS bar({f:"blah703"}, {f:"blah297"}) is 13
+PASS foo({f:"blah704"}, {f:"blah296"}) is [14, false]
+PASS bar({f:"blah704"}, {f:"blah296"}) is 13
+PASS foo({f:"blah705"}, {f:"blah295"}) is [14, false]
+PASS bar({f:"blah705"}, {f:"blah295"}) is 13
+PASS foo({f:"blah706"}, {f:"blah294"}) is [14, false]
+PASS bar({f:"blah706"}, {f:"blah294"}) is 13
+PASS foo({f:"blah707"}, {f:"blah293"}) is [14, false]
+PASS bar({f:"blah707"}, {f:"blah293"}) is 13
+PASS foo({f:"blah708"}, {f:"blah292"}) is [14, false]
+PASS bar({f:"blah708"}, {f:"blah292"}) is 13
+PASS foo({f:"blah709"}, {f:"blah291"}) is [14, false]
+PASS bar({f:"blah709"}, {f:"blah291"}) is 13
+PASS foo({f:"blah710"}, {f:"blah290"}) is [14, false]
+PASS bar({f:"blah710"}, {f:"blah290"}) is 13
+PASS foo({f:"blah711"}, {f:"blah289"}) is [14, false]
+PASS bar({f:"blah711"}, {f:"blah289"}) is 13
+PASS foo({f:"blah712"}, {f:"blah288"}) is [14, false]
+PASS bar({f:"blah712"}, {f:"blah288"}) is 13
+PASS foo({f:"blah713"}, {f:"blah287"}) is [14, false]
+PASS bar({f:"blah713"}, {f:"blah287"}) is 13
+PASS foo({f:"blah714"}, {f:"blah286"}) is [14, false]
+PASS bar({f:"blah714"}, {f:"blah286"}) is 13
+PASS foo({f:"blah715"}, {f:"blah285"}) is [14, false]
+PASS bar({f:"blah715"}, {f:"blah285"}) is 13
+PASS foo({f:"blah716"}, {f:"blah284"}) is [14, false]
+PASS bar({f:"blah716"}, {f:"blah284"}) is 13
+PASS foo({f:"blah717"}, {f:"blah283"}) is [14, false]
+PASS bar({f:"blah717"}, {f:"blah283"}) is 13
+PASS foo({f:"blah718"}, {f:"blah282"}) is [14, false]
+PASS bar({f:"blah718"}, {f:"blah282"}) is 13
+PASS foo({f:"blah719"}, {f:"blah281"}) is [14, false]
+PASS bar({f:"blah719"}, {f:"blah281"}) is 13
+PASS foo({f:"blah720"}, {f:"blah280"}) is [14, false]
+PASS bar({f:"blah720"}, {f:"blah280"}) is 13
+PASS foo({f:"blah721"}, {f:"blah279"}) is [14, false]
+PASS bar({f:"blah721"}, {f:"blah279"}) is 13
+PASS foo({f:"blah722"}, {f:"blah278"}) is [14, false]
+PASS bar({f:"blah722"}, {f:"blah278"}) is 13
+PASS foo({f:"blah723"}, {f:"blah277"}) is [14, false]
+PASS bar({f:"blah723"}, {f:"blah277"}) is 13
+PASS foo({f:"blah724"}, {f:"blah276"}) is [14, false]
+PASS bar({f:"blah724"}, {f:"blah276"}) is 13
+PASS foo({f:"blah725"}, {f:"blah275"}) is [14, false]
+PASS bar({f:"blah725"}, {f:"blah275"}) is 13
+PASS foo({f:"blah726"}, {f:"blah274"}) is [14, false]
+PASS bar({f:"blah726"}, {f:"blah274"}) is 13
+PASS foo({f:"blah727"}, {f:"blah273"}) is [14, false]
+PASS bar({f:"blah727"}, {f:"blah273"}) is 13
+PASS foo({f:"blah728"}, {f:"blah272"}) is [14, false]
+PASS bar({f:"blah728"}, {f:"blah272"}) is 13
+PASS foo({f:"blah729"}, {f:"blah271"}) is [14, false]
+PASS bar({f:"blah729"}, {f:"blah271"}) is 13
+PASS foo({f:"blah730"}, {f:"blah270"}) is [14, false]
+PASS bar({f:"blah730"}, {f:"blah270"}) is 13
+PASS foo({f:"blah731"}, {f:"blah269"}) is [14, false]
+PASS bar({f:"blah731"}, {f:"blah269"}) is 13
+PASS foo({f:"blah732"}, {f:"blah268"}) is [14, false]
+PASS bar({f:"blah732"}, {f:"blah268"}) is 13
+PASS foo({f:"blah733"}, {f:"blah267"}) is [14, false]
+PASS bar({f:"blah733"}, {f:"blah267"}) is 13
+PASS foo({f:"blah734"}, {f:"blah266"}) is [14, false]
+PASS bar({f:"blah734"}, {f:"blah266"}) is 13
+PASS foo({f:"blah735"}, {f:"blah265"}) is [14, false]
+PASS bar({f:"blah735"}, {f:"blah265"}) is 13
+PASS foo({f:"blah736"}, {f:"blah264"}) is [14, false]
+PASS bar({f:"blah736"}, {f:"blah264"}) is 13
+PASS foo({f:"blah737"}, {f:"blah263"}) is [14, false]
+PASS bar({f:"blah737"}, {f:"blah263"}) is 13
+PASS foo({f:"blah738"}, {f:"blah262"}) is [14, false]
+PASS bar({f:"blah738"}, {f:"blah262"}) is 13
+PASS foo({f:"blah739"}, {f:"blah261"}) is [14, false]
+PASS bar({f:"blah739"}, {f:"blah261"}) is 13
+PASS foo({f:"blah740"}, {f:"blah260"}) is [14, false]
+PASS bar({f:"blah740"}, {f:"blah260"}) is 13
+PASS foo({f:"blah741"}, {f:"blah259"}) is [14, false]
+PASS bar({f:"blah741"}, {f:"blah259"}) is 13
+PASS foo({f:"blah742"}, {f:"blah258"}) is [14, false]
+PASS bar({f:"blah742"}, {f:"blah258"}) is 13
+PASS foo({f:"blah743"}, {f:"blah257"}) is [14, false]
+PASS bar({f:"blah743"}, {f:"blah257"}) is 13
+PASS foo({f:"blah744"}, {f:"blah256"}) is [14, false]
+PASS bar({f:"blah744"}, {f:"blah256"}) is 13
+PASS foo({f:"blah745"}, {f:"blah255"}) is [14, false]
+PASS bar({f:"blah745"}, {f:"blah255"}) is 13
+PASS foo({f:"blah746"}, {f:"blah254"}) is [14, false]
+PASS bar({f:"blah746"}, {f:"blah254"}) is 13
+PASS foo({f:"blah747"}, {f:"blah253"}) is [14, false]
+PASS bar({f:"blah747"}, {f:"blah253"}) is 13
+PASS foo({f:"blah748"}, {f:"blah252"}) is [14, false]
+PASS bar({f:"blah748"}, {f:"blah252"}) is 13
+PASS foo({f:"blah749"}, {f:"blah251"}) is [14, false]
+PASS bar({f:"blah749"}, {f:"blah251"}) is 13
+PASS foo({f:"blah750"}, {f:"blah250"}) is [14, false]
+PASS bar({f:"blah750"}, {f:"blah250"}) is 13
+PASS foo({f:"blah751"}, {f:"blah249"}) is [14, false]
+PASS bar({f:"blah751"}, {f:"blah249"}) is 13
+PASS foo({f:"blah752"}, {f:"blah248"}) is [14, false]
+PASS bar({f:"blah752"}, {f:"blah248"}) is 13
+PASS foo({f:"blah753"}, {f:"blah247"}) is [14, false]
+PASS bar({f:"blah753"}, {f:"blah247"}) is 13
+PASS foo({f:"blah754"}, {f:"blah246"}) is [14, false]
+PASS bar({f:"blah754"}, {f:"blah246"}) is 13
+PASS foo({f:"blah755"}, {f:"blah245"}) is [14, false]
+PASS bar({f:"blah755"}, {f:"blah245"}) is 13
+PASS foo({f:"blah756"}, {f:"blah244"}) is [14, false]
+PASS bar({f:"blah756"}, {f:"blah244"}) is 13
+PASS foo({f:"blah757"}, {f:"blah243"}) is [14, false]
+PASS bar({f:"blah757"}, {f:"blah243"}) is 13
+PASS foo({f:"blah758"}, {f:"blah242"}) is [14, false]
+PASS bar({f:"blah758"}, {f:"blah242"}) is 13
+PASS foo({f:"blah759"}, {f:"blah241"}) is [14, false]
+PASS bar({f:"blah759"}, {f:"blah241"}) is 13
+PASS foo({f:"blah760"}, {f:"blah240"}) is [14, false]
+PASS bar({f:"blah760"}, {f:"blah240"}) is 13
+PASS foo({f:"blah761"}, {f:"blah239"}) is [14, false]
+PASS bar({f:"blah761"}, {f:"blah239"}) is 13
+PASS foo({f:"blah762"}, {f:"blah238"}) is [14, false]
+PASS bar({f:"blah762"}, {f:"blah238"}) is 13
+PASS foo({f:"blah763"}, {f:"blah237"}) is [14, false]
+PASS bar({f:"blah763"}, {f:"blah237"}) is 13
+PASS foo({f:"blah764"}, {f:"blah236"}) is [14, false]
+PASS bar({f:"blah764"}, {f:"blah236"}) is 13
+PASS foo({f:"blah765"}, {f:"blah235"}) is [14, false]
+PASS bar({f:"blah765"}, {f:"blah235"}) is 13
+PASS foo({f:"blah766"}, {f:"blah234"}) is [14, false]
+PASS bar({f:"blah766"}, {f:"blah234"}) is 13
+PASS foo({f:"blah767"}, {f:"blah233"}) is [14, false]
+PASS bar({f:"blah767"}, {f:"blah233"}) is 13
+PASS foo({f:"blah768"}, {f:"blah232"}) is [14, false]
+PASS bar({f:"blah768"}, {f:"blah232"}) is 13
+PASS foo({f:"blah769"}, {f:"blah231"}) is [14, false]
+PASS bar({f:"blah769"}, {f:"blah231"}) is 13
+PASS foo({f:"blah770"}, {f:"blah230"}) is [14, false]
+PASS bar({f:"blah770"}, {f:"blah230"}) is 13
+PASS foo({f:"blah771"}, {f:"blah229"}) is [14, false]
+PASS bar({f:"blah771"}, {f:"blah229"}) is 13
+PASS foo({f:"blah772"}, {f:"blah228"}) is [14, false]
+PASS bar({f:"blah772"}, {f:"blah228"}) is 13
+PASS foo({f:"blah773"}, {f:"blah227"}) is [14, false]
+PASS bar({f:"blah773"}, {f:"blah227"}) is 13
+PASS foo({f:"blah774"}, {f:"blah226"}) is [14, false]
+PASS bar({f:"blah774"}, {f:"blah226"}) is 13
+PASS foo({f:"blah775"}, {f:"blah225"}) is [14, false]
+PASS bar({f:"blah775"}, {f:"blah225"}) is 13
+PASS foo({f:"blah776"}, {f:"blah224"}) is [14, false]
+PASS bar({f:"blah776"}, {f:"blah224"}) is 13
+PASS foo({f:"blah777"}, {f:"blah223"}) is [14, false]
+PASS bar({f:"blah777"}, {f:"blah223"}) is 13
+PASS foo({f:"blah778"}, {f:"blah222"}) is [14, false]
+PASS bar({f:"blah778"}, {f:"blah222"}) is 13
+PASS foo({f:"blah779"}, {f:"blah221"}) is [14, false]
+PASS bar({f:"blah779"}, {f:"blah221"}) is 13
+PASS foo({f:"blah780"}, {f:"blah220"}) is [14, false]
+PASS bar({f:"blah780"}, {f:"blah220"}) is 13
+PASS foo({f:"blah781"}, {f:"blah219"}) is [14, false]
+PASS bar({f:"blah781"}, {f:"blah219"}) is 13
+PASS foo({f:"blah782"}, {f:"blah218"}) is [14, false]
+PASS bar({f:"blah782"}, {f:"blah218"}) is 13
+PASS foo({f:"blah783"}, {f:"blah217"}) is [14, false]
+PASS bar({f:"blah783"}, {f:"blah217"}) is 13
+PASS foo({f:"blah784"}, {f:"blah216"}) is [14, false]
+PASS bar({f:"blah784"}, {f:"blah216"}) is 13
+PASS foo({f:"blah785"}, {f:"blah215"}) is [14, false]
+PASS bar({f:"blah785"}, {f:"blah215"}) is 13
+PASS foo({f:"blah786"}, {f:"blah214"}) is [14, false]
+PASS bar({f:"blah786"}, {f:"blah214"}) is 13
+PASS foo({f:"blah787"}, {f:"blah213"}) is [14, false]
+PASS bar({f:"blah787"}, {f:"blah213"}) is 13
+PASS foo({f:"blah788"}, {f:"blah212"}) is [14, false]
+PASS bar({f:"blah788"}, {f:"blah212"}) is 13
+PASS foo({f:"blah789"}, {f:"blah211"}) is [14, false]
+PASS bar({f:"blah789"}, {f:"blah211"}) is 13
+PASS foo({f:"blah790"}, {f:"blah210"}) is [14, false]
+PASS bar({f:"blah790"}, {f:"blah210"}) is 13
+PASS foo({f:"blah791"}, {f:"blah209"}) is [14, false]
+PASS bar({f:"blah791"}, {f:"blah209"}) is 13
+PASS foo({f:"blah792"}, {f:"blah208"}) is [14, false]
+PASS bar({f:"blah792"}, {f:"blah208"}) is 13
+PASS foo({f:"blah793"}, {f:"blah207"}) is [14, false]
+PASS bar({f:"blah793"}, {f:"blah207"}) is 13
+PASS foo({f:"blah794"}, {f:"blah206"}) is [14, false]
+PASS bar({f:"blah794"}, {f:"blah206"}) is 13
+PASS foo({f:"blah795"}, {f:"blah205"}) is [14, false]
+PASS bar({f:"blah795"}, {f:"blah205"}) is 13
+PASS foo({f:"blah796"}, {f:"blah204"}) is [14, false]
+PASS bar({f:"blah796"}, {f:"blah204"}) is 13
+PASS foo({f:"blah797"}, {f:"blah203"}) is [14, false]
+PASS bar({f:"blah797"}, {f:"blah203"}) is 13
+PASS foo({f:"blah798"}, {f:"blah202"}) is [14, false]
+PASS bar({f:"blah798"}, {f:"blah202"}) is 13
+PASS foo({f:"blah799"}, {f:"blah201"}) is [14, false]
+PASS bar({f:"blah799"}, {f:"blah201"}) is 13
+PASS foo({f:"blah800"}, {f:"blah200"}) is [14, false]
+PASS bar({f:"blah800"}, {f:"blah200"}) is 13
+PASS foo({f:"blah801"}, {f:"blah199"}) is [14, false]
+PASS bar({f:"blah801"}, {f:"blah199"}) is 13
+PASS foo({f:"blah802"}, {f:"blah198"}) is [14, false]
+PASS bar({f:"blah802"}, {f:"blah198"}) is 13
+PASS foo({f:"blah803"}, {f:"blah197"}) is [14, false]
+PASS bar({f:"blah803"}, {f:"blah197"}) is 13
+PASS foo({f:"blah804"}, {f:"blah196"}) is [14, false]
+PASS bar({f:"blah804"}, {f:"blah196"}) is 13
+PASS foo({f:"blah805"}, {f:"blah195"}) is [14, false]
+PASS bar({f:"blah805"}, {f:"blah195"}) is 13
+PASS foo({f:"blah806"}, {f:"blah194"}) is [14, false]
+PASS bar({f:"blah806"}, {f:"blah194"}) is 13
+PASS foo({f:"blah807"}, {f:"blah193"}) is [14, false]
+PASS bar({f:"blah807"}, {f:"blah193"}) is 13
+PASS foo({f:"blah808"}, {f:"blah192"}) is [14, false]
+PASS bar({f:"blah808"}, {f:"blah192"}) is 13
+PASS foo({f:"blah809"}, {f:"blah191"}) is [14, false]
+PASS bar({f:"blah809"}, {f:"blah191"}) is 13
+PASS foo({f:"blah810"}, {f:"blah190"}) is [14, false]
+PASS bar({f:"blah810"}, {f:"blah190"}) is 13
+PASS foo({f:"blah811"}, {f:"blah189"}) is [14, false]
+PASS bar({f:"blah811"}, {f:"blah189"}) is 13
+PASS foo({f:"blah812"}, {f:"blah188"}) is [14, false]
+PASS bar({f:"blah812"}, {f:"blah188"}) is 13
+PASS foo({f:"blah813"}, {f:"blah187"}) is [14, false]
+PASS bar({f:"blah813"}, {f:"blah187"}) is 13
+PASS foo({f:"blah814"}, {f:"blah186"}) is [14, false]
+PASS bar({f:"blah814"}, {f:"blah186"}) is 13
+PASS foo({f:"blah815"}, {f:"blah185"}) is [14, false]
+PASS bar({f:"blah815"}, {f:"blah185"}) is 13
+PASS foo({f:"blah816"}, {f:"blah184"}) is [14, false]
+PASS bar({f:"blah816"}, {f:"blah184"}) is 13
+PASS foo({f:"blah817"}, {f:"blah183"}) is [14, false]
+PASS bar({f:"blah817"}, {f:"blah183"}) is 13
+PASS foo({f:"blah818"}, {f:"blah182"}) is [14, false]
+PASS bar({f:"blah818"}, {f:"blah182"}) is 13
+PASS foo({f:"blah819"}, {f:"blah181"}) is [14, false]
+PASS bar({f:"blah819"}, {f:"blah181"}) is 13
+PASS foo({f:"blah820"}, {f:"blah180"}) is [14, false]
+PASS bar({f:"blah820"}, {f:"blah180"}) is 13
+PASS foo({f:"blah821"}, {f:"blah179"}) is [14, false]
+PASS bar({f:"blah821"}, {f:"blah179"}) is 13
+PASS foo({f:"blah822"}, {f:"blah178"}) is [14, false]
+PASS bar({f:"blah822"}, {f:"blah178"}) is 13
+PASS foo({f:"blah823"}, {f:"blah177"}) is [14, false]
+PASS bar({f:"blah823"}, {f:"blah177"}) is 13
+PASS foo({f:"blah824"}, {f:"blah176"}) is [14, false]
+PASS bar({f:"blah824"}, {f:"blah176"}) is 13
+PASS foo({f:"blah825"}, {f:"blah175"}) is [14, false]
+PASS bar({f:"blah825"}, {f:"blah175"}) is 13
+PASS foo({f:"blah826"}, {f:"blah174"}) is [14, false]
+PASS bar({f:"blah826"}, {f:"blah174"}) is 13
+PASS foo({f:"blah827"}, {f:"blah173"}) is [14, false]
+PASS bar({f:"blah827"}, {f:"blah173"}) is 13
+PASS foo({f:"blah828"}, {f:"blah172"}) is [14, false]
+PASS bar({f:"blah828"}, {f:"blah172"}) is 13
+PASS foo({f:"blah829"}, {f:"blah171"}) is [14, false]
+PASS bar({f:"blah829"}, {f:"blah171"}) is 13
+PASS foo({f:"blah830"}, {f:"blah170"}) is [14, false]
+PASS bar({f:"blah830"}, {f:"blah170"}) is 13
+PASS foo({f:"blah831"}, {f:"blah169"}) is [14, false]
+PASS bar({f:"blah831"}, {f:"blah169"}) is 13
+PASS foo({f:"blah832"}, {f:"blah168"}) is [14, false]
+PASS bar({f:"blah832"}, {f:"blah168"}) is 13
+PASS foo({f:"blah833"}, {f:"blah167"}) is [14, false]
+PASS bar({f:"blah833"}, {f:"blah167"}) is 13
+PASS foo({f:"blah834"}, {f:"blah166"}) is [14, false]
+PASS bar({f:"blah834"}, {f:"blah166"}) is 13
+PASS foo({f:"blah835"}, {f:"blah165"}) is [14, false]
+PASS bar({f:"blah835"}, {f:"blah165"}) is 13
+PASS foo({f:"blah836"}, {f:"blah164"}) is [14, false]
+PASS bar({f:"blah836"}, {f:"blah164"}) is 13
+PASS foo({f:"blah837"}, {f:"blah163"}) is [14, false]
+PASS bar({f:"blah837"}, {f:"blah163"}) is 13
+PASS foo({f:"blah838"}, {f:"blah162"}) is [14, false]
+PASS bar({f:"blah838"}, {f:"blah162"}) is 13
+PASS foo({f:"blah839"}, {f:"blah161"}) is [14, false]
+PASS bar({f:"blah839"}, {f:"blah161"}) is 13
+PASS foo({f:"blah840"}, {f:"blah160"}) is [14, false]
+PASS bar({f:"blah840"}, {f:"blah160"}) is 13
+PASS foo({f:"blah841"}, {f:"blah159"}) is [14, false]
+PASS bar({f:"blah841"}, {f:"blah159"}) is 13
+PASS foo({f:"blah842"}, {f:"blah158"}) is [14, false]
+PASS bar({f:"blah842"}, {f:"blah158"}) is 13
+PASS foo({f:"blah843"}, {f:"blah157"}) is [14, false]
+PASS bar({f:"blah843"}, {f:"blah157"}) is 13
+PASS foo({f:"blah844"}, {f:"blah156"}) is [14, false]
+PASS bar({f:"blah844"}, {f:"blah156"}) is 13
+PASS foo({f:"blah845"}, {f:"blah155"}) is [14, false]
+PASS bar({f:"blah845"}, {f:"blah155"}) is 13
+PASS foo({f:"blah846"}, {f:"blah154"}) is [14, false]
+PASS bar({f:"blah846"}, {f:"blah154"}) is 13
+PASS foo({f:"blah847"}, {f:"blah153"}) is [14, false]
+PASS bar({f:"blah847"}, {f:"blah153"}) is 13
+PASS foo({f:"blah848"}, {f:"blah152"}) is [14, false]
+PASS bar({f:"blah848"}, {f:"blah152"}) is 13
+PASS foo({f:"blah849"}, {f:"blah151"}) is [14, false]
+PASS bar({f:"blah849"}, {f:"blah151"}) is 13
+PASS foo({f:"blah850"}, {f:"blah150"}) is [14, false]
+PASS bar({f:"blah850"}, {f:"blah150"}) is 13
+PASS foo({f:"blah851"}, {f:"blah149"}) is [14, false]
+PASS bar({f:"blah851"}, {f:"blah149"}) is 13
+PASS foo({f:"blah852"}, {f:"blah148"}) is [14, false]
+PASS bar({f:"blah852"}, {f:"blah148"}) is 13
+PASS foo({f:"blah853"}, {f:"blah147"}) is [14, false]
+PASS bar({f:"blah853"}, {f:"blah147"}) is 13
+PASS foo({f:"blah854"}, {f:"blah146"}) is [14, false]
+PASS bar({f:"blah854"}, {f:"blah146"}) is 13
+PASS foo({f:"blah855"}, {f:"blah145"}) is [14, false]
+PASS bar({f:"blah855"}, {f:"blah145"}) is 13
+PASS foo({f:"blah856"}, {f:"blah144"}) is [14, false]
+PASS bar({f:"blah856"}, {f:"blah144"}) is 13
+PASS foo({f:"blah857"}, {f:"blah143"}) is [14, false]
+PASS bar({f:"blah857"}, {f:"blah143"}) is 13
+PASS foo({f:"blah858"}, {f:"blah142"}) is [14, false]
+PASS bar({f:"blah858"}, {f:"blah142"}) is 13
+PASS foo({f:"blah859"}, {f:"blah141"}) is [14, false]
+PASS bar({f:"blah859"}, {f:"blah141"}) is 13
+PASS foo({f:"blah860"}, {f:"blah140"}) is [14, false]
+PASS bar({f:"blah860"}, {f:"blah140"}) is 13
+PASS foo({f:"blah861"}, {f:"blah139"}) is [14, false]
+PASS bar({f:"blah861"}, {f:"blah139"}) is 13
+PASS foo({f:"blah862"}, {f:"blah138"}) is [14, false]
+PASS bar({f:"blah862"}, {f:"blah138"}) is 13
+PASS foo({f:"blah863"}, {f:"blah137"}) is [14, false]
+PASS bar({f:"blah863"}, {f:"blah137"}) is 13
+PASS foo({f:"blah864"}, {f:"blah136"}) is [14, false]
+PASS bar({f:"blah864"}, {f:"blah136"}) is 13
+PASS foo({f:"blah865"}, {f:"blah135"}) is [14, false]
+PASS bar({f:"blah865"}, {f:"blah135"}) is 13
+PASS foo({f:"blah866"}, {f:"blah134"}) is [14, false]
+PASS bar({f:"blah866"}, {f:"blah134"}) is 13
+PASS foo({f:"blah867"}, {f:"blah133"}) is [14, false]
+PASS bar({f:"blah867"}, {f:"blah133"}) is 13
+PASS foo({f:"blah868"}, {f:"blah132"}) is [14, false]
+PASS bar({f:"blah868"}, {f:"blah132"}) is 13
+PASS foo({f:"blah869"}, {f:"blah131"}) is [14, false]
+PASS bar({f:"blah869"}, {f:"blah131"}) is 13
+PASS foo({f:"blah870"}, {f:"blah130"}) is [14, false]
+PASS bar({f:"blah870"}, {f:"blah130"}) is 13
+PASS foo({f:"blah871"}, {f:"blah129"}) is [14, false]
+PASS bar({f:"blah871"}, {f:"blah129"}) is 13
+PASS foo({f:"blah872"}, {f:"blah128"}) is [14, false]
+PASS bar({f:"blah872"}, {f:"blah128"}) is 13
+PASS foo({f:"blah873"}, {f:"blah127"}) is [14, false]
+PASS bar({f:"blah873"}, {f:"blah127"}) is 13
+PASS foo({f:"blah874"}, {f:"blah126"}) is [14, false]
+PASS bar({f:"blah874"}, {f:"blah126"}) is 13
+PASS foo({f:"blah875"}, {f:"blah125"}) is [14, false]
+PASS bar({f:"blah875"}, {f:"blah125"}) is 13
+PASS foo({f:"blah876"}, {f:"blah124"}) is [14, false]
+PASS bar({f:"blah876"}, {f:"blah124"}) is 13
+PASS foo({f:"blah877"}, {f:"blah123"}) is [14, false]
+PASS bar({f:"blah877"}, {f:"blah123"}) is 13
+PASS foo({f:"blah878"}, {f:"blah122"}) is [14, false]
+PASS bar({f:"blah878"}, {f:"blah122"}) is 13
+PASS foo({f:"blah879"}, {f:"blah121"}) is [14, false]
+PASS bar({f:"blah879"}, {f:"blah121"}) is 13
+PASS foo({f:"blah880"}, {f:"blah120"}) is [14, false]
+PASS bar({f:"blah880"}, {f:"blah120"}) is 13
+PASS foo({f:"blah881"}, {f:"blah119"}) is [14, false]
+PASS bar({f:"blah881"}, {f:"blah119"}) is 13
+PASS foo({f:"blah882"}, {f:"blah118"}) is [14, false]
+PASS bar({f:"blah882"}, {f:"blah118"}) is 13
+PASS foo({f:"blah883"}, {f:"blah117"}) is [14, false]
+PASS bar({f:"blah883"}, {f:"blah117"}) is 13
+PASS foo({f:"blah884"}, {f:"blah116"}) is [14, false]
+PASS bar({f:"blah884"}, {f:"blah116"}) is 13
+PASS foo({f:"blah885"}, {f:"blah115"}) is [14, false]
+PASS bar({f:"blah885"}, {f:"blah115"}) is 13
+PASS foo({f:"blah886"}, {f:"blah114"}) is [14, false]
+PASS bar({f:"blah886"}, {f:"blah114"}) is 13
+PASS foo({f:"blah887"}, {f:"blah113"}) is [14, false]
+PASS bar({f:"blah887"}, {f:"blah113"}) is 13
+PASS foo({f:"blah888"}, {f:"blah112"}) is [14, false]
+PASS bar({f:"blah888"}, {f:"blah112"}) is 13
+PASS foo({f:"blah889"}, {f:"blah111"}) is [14, false]
+PASS bar({f:"blah889"}, {f:"blah111"}) is 13
+PASS foo({f:"blah890"}, {f:"blah110"}) is [14, false]
+PASS bar({f:"blah890"}, {f:"blah110"}) is 13
+PASS foo({f:"blah891"}, {f:"blah109"}) is [14, false]
+PASS bar({f:"blah891"}, {f:"blah109"}) is 13
+PASS foo({f:"blah892"}, {f:"blah108"}) is [14, false]
+PASS bar({f:"blah892"}, {f:"blah108"}) is 13
+PASS foo({f:"blah893"}, {f:"blah107"}) is [14, false]
+PASS bar({f:"blah893"}, {f:"blah107"}) is 13
+PASS foo({f:"blah894"}, {f:"blah106"}) is [14, false]
+PASS bar({f:"blah894"}, {f:"blah106"}) is 13
+PASS foo({f:"blah895"}, {f:"blah105"}) is [14, false]
+PASS bar({f:"blah895"}, {f:"blah105"}) is 13
+PASS foo({f:"blah896"}, {f:"blah104"}) is [14, false]
+PASS bar({f:"blah896"}, {f:"blah104"}) is 13
+PASS foo({f:"blah897"}, {f:"blah103"}) is [14, false]
+PASS bar({f:"blah897"}, {f:"blah103"}) is 13
+PASS foo({f:"blah898"}, {f:"blah102"}) is [14, false]
+PASS bar({f:"blah898"}, {f:"blah102"}) is 13
+PASS foo({f:"blah899"}, {f:"blah101"}) is [14, false]
+PASS bar({f:"blah899"}, {f:"blah101"}) is 13
+PASS foo({f:"blah900"}, {f:"blah100"}) is [14, false]
+PASS bar({f:"blah900"}, {f:"blah100"}) is 13
+PASS foo({f:"blah901"}, {f:"blah99"}) is [13, false]
+PASS bar({f:"blah901"}, {f:"blah99"}) is 12
+PASS foo({f:"blah902"}, {f:"blah98"}) is [13, false]
+PASS bar({f:"blah902"}, {f:"blah98"}) is 12
+PASS foo({f:"blah903"}, {f:"blah97"}) is [13, false]
+PASS bar({f:"blah903"}, {f:"blah97"}) is 12
+PASS foo({f:"blah904"}, {f:"blah96"}) is [13, false]
+PASS bar({f:"blah904"}, {f:"blah96"}) is 12
+PASS foo({f:"blah905"}, {f:"blah95"}) is [13, false]
+PASS bar({f:"blah905"}, {f:"blah95"}) is 12
+PASS foo({f:"blah906"}, {f:"blah94"}) is [13, false]
+PASS bar({f:"blah906"}, {f:"blah94"}) is 12
+PASS foo({f:"blah907"}, {f:"blah93"}) is [13, false]
+PASS bar({f:"blah907"}, {f:"blah93"}) is 12
+PASS foo({f:"blah908"}, {f:"blah92"}) is [13, false]
+PASS bar({f:"blah908"}, {f:"blah92"}) is 12
+PASS foo({f:"blah909"}, {f:"blah91"}) is [13, false]
+PASS bar({f:"blah909"}, {f:"blah91"}) is 12
+PASS foo({f:"blah910"}, {f:"blah90"}) is [13, false]
+PASS bar({f:"blah910"}, {f:"blah90"}) is 12
+PASS foo({f:"blah911"}, {f:"blah89"}) is [13, false]
+PASS bar({f:"blah911"}, {f:"blah89"}) is 12
+PASS foo({f:"blah912"}, {f:"blah88"}) is [13, false]
+PASS bar({f:"blah912"}, {f:"blah88"}) is 12
+PASS foo({f:"blah913"}, {f:"blah87"}) is [13, false]
+PASS bar({f:"blah913"}, {f:"blah87"}) is 12
+PASS foo({f:"blah914"}, {f:"blah86"}) is [13, false]
+PASS bar({f:"blah914"}, {f:"blah86"}) is 12
+PASS foo({f:"blah915"}, {f:"blah85"}) is [13, false]
+PASS bar({f:"blah915"}, {f:"blah85"}) is 12
+PASS foo({f:"blah916"}, {f:"blah84"}) is [13, false]
+PASS bar({f:"blah916"}, {f:"blah84"}) is 12
+PASS foo({f:"blah917"}, {f:"blah83"}) is [13, false]
+PASS bar({f:"blah917"}, {f:"blah83"}) is 12
+PASS foo({f:"blah918"}, {f:"blah82"}) is [13, false]
+PASS bar({f:"blah918"}, {f:"blah82"}) is 12
+PASS foo({f:"blah919"}, {f:"blah81"}) is [13, false]
+PASS bar({f:"blah919"}, {f:"blah81"}) is 12
+PASS foo({f:"blah920"}, {f:"blah80"}) is [13, false]
+PASS bar({f:"blah920"}, {f:"blah80"}) is 12
+PASS foo({f:"blah921"}, {f:"blah79"}) is [13, false]
+PASS bar({f:"blah921"}, {f:"blah79"}) is 12
+PASS foo({f:"blah922"}, {f:"blah78"}) is [13, false]
+PASS bar({f:"blah922"}, {f:"blah78"}) is 12
+PASS foo({f:"blah923"}, {f:"blah77"}) is [13, false]
+PASS bar({f:"blah923"}, {f:"blah77"}) is 12
+PASS foo({f:"blah924"}, {f:"blah76"}) is [13, false]
+PASS bar({f:"blah924"}, {f:"blah76"}) is 12
+PASS foo({f:"blah925"}, {f:"blah75"}) is [13, false]
+PASS bar({f:"blah925"}, {f:"blah75"}) is 12
+PASS foo({f:"blah926"}, {f:"blah74"}) is [13, false]
+PASS bar({f:"blah926"}, {f:"blah74"}) is 12
+PASS foo({f:"blah927"}, {f:"blah73"}) is [13, false]
+PASS bar({f:"blah927"}, {f:"blah73"}) is 12
+PASS foo({f:"blah928"}, {f:"blah72"}) is [13, false]
+PASS bar({f:"blah928"}, {f:"blah72"}) is 12
+PASS foo({f:"blah929"}, {f:"blah71"}) is [13, false]
+PASS bar({f:"blah929"}, {f:"blah71"}) is 12
+PASS foo({f:"blah930"}, {f:"blah70"}) is [13, false]
+PASS bar({f:"blah930"}, {f:"blah70"}) is 12
+PASS foo({f:"blah931"}, {f:"blah69"}) is [13, false]
+PASS bar({f:"blah931"}, {f:"blah69"}) is 12
+PASS foo({f:"blah932"}, {f:"blah68"}) is [13, false]
+PASS bar({f:"blah932"}, {f:"blah68"}) is 12
+PASS foo({f:"blah933"}, {f:"blah67"}) is [13, false]
+PASS bar({f:"blah933"}, {f:"blah67"}) is 12
+PASS foo({f:"blah934"}, {f:"blah66"}) is [13, false]
+PASS bar({f:"blah934"}, {f:"blah66"}) is 12
+PASS foo({f:"blah935"}, {f:"blah65"}) is [13, false]
+PASS bar({f:"blah935"}, {f:"blah65"}) is 12
+PASS foo({f:"blah936"}, {f:"blah64"}) is [13, false]
+PASS bar({f:"blah936"}, {f:"blah64"}) is 12
+PASS foo({f:"blah937"}, {f:"blah63"}) is [13, false]
+PASS bar({f:"blah937"}, {f:"blah63"}) is 12
+PASS foo({f:"blah938"}, {f:"blah62"}) is [13, false]
+PASS bar({f:"blah938"}, {f:"blah62"}) is 12
+PASS foo({f:"blah939"}, {f:"blah61"}) is [13, false]
+PASS bar({f:"blah939"}, {f:"blah61"}) is 12
+PASS foo({f:"blah940"}, {f:"blah60"}) is [13, false]
+PASS bar({f:"blah940"}, {f:"blah60"}) is 12
+PASS foo({f:"blah941"}, {f:"blah59"}) is [13, false]
+PASS bar({f:"blah941"}, {f:"blah59"}) is 12
+PASS foo({f:"blah942"}, {f:"blah58"}) is [13, false]
+PASS bar({f:"blah942"}, {f:"blah58"}) is 12
+PASS foo({f:"blah943"}, {f:"blah57"}) is [13, false]
+PASS bar({f:"blah943"}, {f:"blah57"}) is 12
+PASS foo({f:"blah944"}, {f:"blah56"}) is [13, false]
+PASS bar({f:"blah944"}, {f:"blah56"}) is 12
+PASS foo({f:"blah945"}, {f:"blah55"}) is [13, false]
+PASS bar({f:"blah945"}, {f:"blah55"}) is 12
+PASS foo({f:"blah946"}, {f:"blah54"}) is [13, false]
+PASS bar({f:"blah946"}, {f:"blah54"}) is 12
+PASS foo({f:"blah947"}, {f:"blah53"}) is [13, false]
+PASS bar({f:"blah947"}, {f:"blah53"}) is 12
+PASS foo({f:"blah948"}, {f:"blah52"}) is [13, false]
+PASS bar({f:"blah948"}, {f:"blah52"}) is 12
+PASS foo({f:"blah949"}, {f:"blah51"}) is [13, false]
+PASS bar({f:"blah949"}, {f:"blah51"}) is 12
+PASS foo({f:"blah950"}, {f:"blah50"}) is [13, false]
+PASS bar({f:"blah950"}, {f:"blah50"}) is 12
+PASS foo({f:"blah951"}, {f:"blah49"}) is [13, false]
+PASS bar({f:"blah951"}, {f:"blah49"}) is 12
+PASS foo({f:"blah952"}, {f:"blah48"}) is [13, false]
+PASS bar({f:"blah952"}, {f:"blah48"}) is 12
+PASS foo({f:"blah953"}, {f:"blah47"}) is [13, false]
+PASS bar({f:"blah953"}, {f:"blah47"}) is 12
+PASS foo({f:"blah954"}, {f:"blah46"}) is [13, false]
+PASS bar({f:"blah954"}, {f:"blah46"}) is 12
+PASS foo({f:"blah955"}, {f:"blah45"}) is [13, false]
+PASS bar({f:"blah955"}, {f:"blah45"}) is 12
+PASS foo({f:"blah956"}, {f:"blah44"}) is [13, false]
+PASS bar({f:"blah956"}, {f:"blah44"}) is 12
+PASS foo({f:"blah957"}, {f:"blah43"}) is [13, false]
+PASS bar({f:"blah957"}, {f:"blah43"}) is 12
+PASS foo({f:"blah958"}, {f:"blah42"}) is [13, false]
+PASS bar({f:"blah958"}, {f:"blah42"}) is 12
+PASS foo({f:"blah959"}, {f:"blah41"}) is [13, false]
+PASS bar({f:"blah959"}, {f:"blah41"}) is 12
+PASS foo({f:"blah960"}, {f:"blah40"}) is [13, false]
+PASS bar({f:"blah960"}, {f:"blah40"}) is 12
+PASS foo({f:"blah961"}, {f:"blah39"}) is [13, false]
+PASS bar({f:"blah961"}, {f:"blah39"}) is 12
+PASS foo({f:"blah962"}, {f:"blah38"}) is [13, false]
+PASS bar({f:"blah962"}, {f:"blah38"}) is 12
+PASS foo({f:"blah963"}, {f:"blah37"}) is [13, false]
+PASS bar({f:"blah963"}, {f:"blah37"}) is 12
+PASS foo({f:"blah964"}, {f:"blah36"}) is [13, false]
+PASS bar({f:"blah964"}, {f:"blah36"}) is 12
+PASS foo({f:"blah965"}, {f:"blah35"}) is [13, false]
+PASS bar({f:"blah965"}, {f:"blah35"}) is 12
+PASS foo({f:"blah966"}, {f:"blah34"}) is [13, false]
+PASS bar({f:"blah966"}, {f:"blah34"}) is 12
+PASS foo({f:"blah967"}, {f:"blah33"}) is [13, false]
+PASS bar({f:"blah967"}, {f:"blah33"}) is 12
+PASS foo({f:"blah968"}, {f:"blah32"}) is [13, false]
+PASS bar({f:"blah968"}, {f:"blah32"}) is 12
+PASS foo({f:"blah969"}, {f:"blah31"}) is [13, false]
+PASS bar({f:"blah969"}, {f:"blah31"}) is 12
+PASS foo({f:"blah970"}, {f:"blah30"}) is [13, false]
+PASS bar({f:"blah970"}, {f:"blah30"}) is 12
+PASS foo({f:"blah971"}, {f:"blah29"}) is [13, false]
+PASS bar({f:"blah971"}, {f:"blah29"}) is 12
+PASS foo({f:"blah972"}, {f:"blah28"}) is [13, false]
+PASS bar({f:"blah972"}, {f:"blah28"}) is 12
+PASS foo({f:"blah973"}, {f:"blah27"}) is [13, false]
+PASS bar({f:"blah973"}, {f:"blah27"}) is 12
+PASS foo({f:"blah974"}, {f:"blah26"}) is [13, false]
+PASS bar({f:"blah974"}, {f:"blah26"}) is 12
+PASS foo({f:"blah975"}, {f:"blah25"}) is [13, false]
+PASS bar({f:"blah975"}, {f:"blah25"}) is 12
+PASS foo({f:"blah976"}, {f:"blah24"}) is [13, false]
+PASS bar({f:"blah976"}, {f:"blah24"}) is 12
+PASS foo({f:"blah977"}, {f:"blah23"}) is [13, false]
+PASS bar({f:"blah977"}, {f:"blah23"}) is 12
+PASS foo({f:"blah978"}, {f:"blah22"}) is [13, false]
+PASS bar({f:"blah978"}, {f:"blah22"}) is 12
+PASS foo({f:"blah979"}, {f:"blah21"}) is [13, false]
+PASS bar({f:"blah979"}, {f:"blah21"}) is 12
+PASS foo({f:"blah980"}, {f:"blah20"}) is [13, false]
+PASS bar({f:"blah980"}, {f:"blah20"}) is 12
+PASS foo({f:"blah981"}, {f:"blah19"}) is [13, false]
+PASS bar({f:"blah981"}, {f:"blah19"}) is 12
+PASS foo({f:"blah982"}, {f:"blah18"}) is [13, false]
+PASS bar({f:"blah982"}, {f:"blah18"}) is 12
+PASS foo({f:"blah983"}, {f:"blah17"}) is [13, false]
+PASS bar({f:"blah983"}, {f:"blah17"}) is 12
+PASS foo({f:"blah984"}, {f:"blah16"}) is [13, false]
+PASS bar({f:"blah984"}, {f:"blah16"}) is 12
+PASS foo({f:"blah985"}, {f:"blah15"}) is [13, false]
+PASS bar({f:"blah985"}, {f:"blah15"}) is 12
+PASS foo({f:"blah986"}, {f:"blah14"}) is [13, false]
+PASS bar({f:"blah986"}, {f:"blah14"}) is 12
+PASS foo({f:"blah987"}, {f:"blah13"}) is [13, false]
+PASS bar({f:"blah987"}, {f:"blah13"}) is 12
+PASS foo({f:"blah988"}, {f:"blah12"}) is [13, false]
+PASS bar({f:"blah988"}, {f:"blah12"}) is 12
+PASS foo({f:"blah989"}, {f:"blah11"}) is [13, false]
+PASS bar({f:"blah989"}, {f:"blah11"}) is 12
+PASS foo({f:"blah990"}, {f:"blah10"}) is [13, false]
+PASS bar({f:"blah990"}, {f:"blah10"}) is 12
+PASS foo({f:"blah991"}, {f:"blah9"}) is [12, false]
+PASS bar({f:"blah991"}, {f:"blah9"}) is 11
+PASS foo({f:"blah992"}, {f:"blah8"}) is [12, false]
+PASS bar({f:"blah992"}, {f:"blah8"}) is 11
+PASS foo({f:"blah993"}, {f:"blah7"}) is [12, false]
+PASS bar({f:"blah993"}, {f:"blah7"}) is 11
+PASS foo({f:"blah994"}, {f:"blah6"}) is [12, false]
+PASS bar({f:"blah994"}, {f:"blah6"}) is 11
+PASS foo({f:"blah995"}, {f:"blah5"}) is [12, false]
+PASS bar({f:"blah995"}, {f:"blah5"}) is 11
+PASS foo({f:"blah996"}, {f:"blah4"}) is [12, false]
+PASS bar({f:"blah996"}, {f:"blah4"}) is 11
+PASS foo({f:"blah997"}, {f:"blah3"}) is [12, false]
+PASS bar({f:"blah997"}, {f:"blah3"}) is 11
+PASS foo({f:"blah998"}, {f:"blah2"}) is [12, false]
+PASS bar({f:"blah998"}, {f:"blah2"}) is 11
+PASS foo({f:"blah999"}, {f:"blah1"}) is [12, false]
+PASS bar({f:"blah999"}, {f:"blah1"}) is 11
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-string-stricteq.js b/test/webkit/dfg-string-stricteq.js
new file mode 100644 (file)
index 0000000..27a809a
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG does the right thing on strict equality for known strings."
+);
+
+function foo(a, b) {
+    a = a.f;
+    b = b.f;
+    var c = a.length + b.length;
+    return [c, a === b];
+}
+
+function bar(a, b) {
+    a = a.f;
+    b = b.f;
+    var c = a.length + b.length;
+    if (a === b)
+        return c + 1;
+    else
+        return c - 1;
+}
+
+for (var i = 0; i < 1000; ++i) {
+    var a = "blah" + i;
+    var b = "blah" + (1000 - i);
+    var areEqual = i == 500;
+    shouldBe("foo({f:\"" + a + "\"}, {f:\"" + b + "\"})", "[" + (a.length + b.length) + ", " + areEqual + "]");
+    shouldBe("bar({f:\"" + a + "\"}, {f:\"" + b + "\"})", "" + (areEqual ? a.length + b.length + 1 : a.length + b.length - 1));
+}
+
diff --git a/test/webkit/dfg-tear-off-arguments-not-activation-expected.txt b/test/webkit/dfg-tear-off-arguments-not-activation-expected.txt
new file mode 100644 (file)
index 0000000..cad8d56
--- /dev/null
@@ -0,0 +1,432 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests the case that a function that might create an activation has not actually created one, but has created its arguments.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-tear-off-arguments-not-activation.js b/test/webkit/dfg-tear-off-arguments-not-activation.js
new file mode 100644 (file)
index 0000000..d3967cc
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests the case that a function that might create an activation has not actually created one, but has created its arguments."
+);
+
+function bar() {
+    return foo.arguments;
+}
+
+function foo(p) {
+    var x = 42;
+    if (p)
+        return (function() { return x; });
+    else
+        return bar();
+}
+
+for (var i = 0; i < 200; ++i) {
+    var thingy = foo(false);
+    shouldBe("thingy.length", "1");
+    shouldBe("thingy[0]", "false");
+}
+
diff --git a/test/webkit/dfg-tear-off-function-dot-arguments-expected.txt b/test/webkit/dfg-tear-off-function-dot-arguments-expected.txt
new file mode 100644 (file)
index 0000000..ab0b59c
--- /dev/null
@@ -0,0 +1,432 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests a function that might create 'arguments' but doesn't, but does create function.arguments.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS thingy.length is 1
+PASS thingy[0] is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-tear-off-function-dot-arguments.js b/test/webkit/dfg-tear-off-function-dot-arguments.js
new file mode 100644 (file)
index 0000000..a8582bf
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests a function that might create 'arguments' but doesn't, but does create function.arguments."
+);
+
+function bar() {
+    return foo.arguments;
+}
+
+function foo(p) {
+    var x = 42;
+    if (p)
+        return arguments[0];
+    else
+        return bar();
+}
+
+for (var i = 0; i < 200; ++i) {
+    var thingy = foo(false);
+    shouldBe("thingy.length", "1");
+    shouldBe("thingy[0]", "false");
+}
+
diff --git a/test/webkit/dfg-to-string-bad-toString-expected.txt b/test/webkit/dfg-to-string-bad-toString-expected.txt
new file mode 100644 (file)
index 0000000..13ade20
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-to-string-bad-toString.js b/test/webkit/dfg-to-string-bad-toString.js
new file mode 100644 (file)
index 0000000..70198bc
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted."
+);
+
+String.prototype.toString = function() { return 42; }
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("\"\" + foo(\"hello\")", "\"42\"");
diff --git a/test/webkit/dfg-to-string-bad-valueOf-expected.txt b/test/webkit/dfg-to-string-bad-valueOf-expected.txt
new file mode 100644 (file)
index 0000000..13ade20
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-to-string-bad-valueOf.js b/test/webkit/dfg-to-string-bad-valueOf.js
new file mode 100644 (file)
index 0000000..69e2d55
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted."
+);
+
+String.prototype.valueOf = function() { return 42; }
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("\"\" + foo(\"hello\")", "\"42\"");
diff --git a/test/webkit/dfg-to-string-int-expected.txt b/test/webkit/dfg-to-string-int-expected.txt
new file mode 100644 (file)
index 0000000..afd078e
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS "" + foo(42) is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-to-string-int-or-string-expected.txt b/test/webkit/dfg-to-string-int-or-string-expected.txt
new file mode 100644 (file)
index 0000000..5e1e906
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS "" + foo(i % 2 ? 42 : "hello") is i % 2 ? "42" : "hello"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-to-string-int-or-string.js b/test/webkit/dfg-to-string-int-or-string.js
new file mode 100644 (file)
index 0000000..54fabd0
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted."
+);
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+for (var i = 0; i < 1000; ++i)
+    shouldBe("\"\" + foo(i % 2 ? 42 : \"hello\")", "i % 2 ? \"42\" : \"hello\"");
diff --git a/test/webkit/dfg-to-string-int.js b/test/webkit/dfg-to-string-int.js
new file mode 100644 (file)
index 0000000..89c320f
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted."
+);
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("\"\" + foo(42)", "\"42\"");
diff --git a/test/webkit/dfg-to-string-on-cell-expected.txt b/test/webkit/dfg-to-string-on-cell-expected.txt
new file mode 100644 (file)
index 0000000..c430743
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that ToString on a cell works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,1,2,3"
+PASS "" + foo("foo", i % 2 ? "hello" : [1, 2, 3]) is "foo,hello"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-to-string-on-cell.js b/test/webkit/dfg-to-string-on-cell.js
new file mode 100644 (file)
index 0000000..8ae7388
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Tests that ToString on a cell works.");
+
+function foo(a, o) {
+    return [a, String(o)];
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("\"\" + foo(\"foo\", i % 2 ? \"hello\" : [1, 2, 3])", i % 2 ? "\"foo,hello\"" : "\"foo,1,2,3\"");
+
diff --git a/test/webkit/dfg-to-string-on-value-expected.txt b/test/webkit/dfg-to-string-on-value-expected.txt
new file mode 100644 (file)
index 0000000..941339e
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that ToString on a possible-non-cell value works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,42"
+PASS "" + foo("foo", i % 2 ? "hello" : 42) is "foo,hello"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-to-string-on-value.js b/test/webkit/dfg-to-string-on-value.js
new file mode 100644 (file)
index 0000000..0c89f3b
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Tests that ToString on a possible-non-cell value works.");
+
+function foo(a, o) {
+    return [a, String(o)];
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("\"\" + foo(\"foo\", i % 2 ? \"hello\" : 42)", i % 2 ? "\"foo,hello\"" : "\"foo,42\"");
+
diff --git a/test/webkit/dfg-to-string-side-effect-clobbers-toString-expected.txt b/test/webkit/dfg-to-string-side-effect-clobbers-toString-expected.txt
new file mode 100644 (file)
index 0000000..3a59b2f
--- /dev/null
@@ -0,0 +1,282 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens when you do ToString twice, and it has a side effect that clobbers the toString method in between the two ToStrings.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+PASS foo(new String("hello"), sideEffect) is "hellohello"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello150"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello151"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello152"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello153"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello154"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello155"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello156"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello157"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello158"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello159"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello160"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello161"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello162"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello163"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello164"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello165"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello166"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello167"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello168"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello169"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello170"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello171"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello172"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello173"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello174"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello175"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello176"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello177"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello178"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello179"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello180"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello181"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello182"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello183"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello184"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello185"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello186"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello187"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello188"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello189"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello190"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello191"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello192"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello193"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello194"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello195"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello196"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello197"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello198"
+hi!
+PASS foo(new String("hello"), sideEffect) is "hello199"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-to-string-side-effect-clobbers-toString.js b/test/webkit/dfg-to-string-side-effect-clobbers-toString.js
new file mode 100644 (file)
index 0000000..5facc60
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens when you do ToString twice, and it has a side effect that clobbers the toString method in between the two ToStrings."
+);
+
+function foo(s, sideEffect) {
+    var a = String(s);
+    sideEffect(s);
+    var b = String(s);
+    return a + b;
+}
+
+var count = 0;
+for (var i = 0; i < 200; ++i) {
+    var code = "(function(s) { " + (i < 150 ? "return " + i + ";" : "count++; debug(\"hi!\"); s.toString = function() { return " + i + "; };") + " })";
+    var sideEffect = eval(code);
+    shouldBe("foo(new String(\"hello\"), sideEffect)", i < 150 ? "\"hellohello\"" : "\"hello" + i + "\"");
+}
diff --git a/test/webkit/dfg-to-string-side-effect-expected.txt b/test/webkit/dfg-to-string-side-effect-expected.txt
new file mode 100644 (file)
index 0000000..4be3e39
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+hello
+PASS "" + foo({toString:function() { debug("hello"); return 42; }}) is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-to-string-side-effect.js b/test/webkit/dfg-to-string-side-effect.js
new file mode 100644 (file)
index 0000000..9b841e3
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is not what we wanted."
+);
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("\"\" + foo({toString:function() { debug(\"hello\"); return 42; }})", "\"42\"");
diff --git a/test/webkit/dfg-to-string-toString-becomes-bad-expected.txt b/test/webkit/dfg-to-string-toString-becomes-bad-expected.txt
new file mode 100644 (file)
index 0000000..b97af50
--- /dev/null
@@ -0,0 +1,182 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is initially fine but then gets clobbered.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-to-string-toString-becomes-bad-with-check-structure-expected.txt b/test/webkit/dfg-to-string-toString-becomes-bad-with-check-structure-expected.txt
new file mode 100644 (file)
index 0000000..af5e73e
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that the DFG checks that the toString method didn't become bad even if the StringObject already had a CheckStructure.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "foo"
+PASS foo.call(new String("foo")) is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-to-string-toString-becomes-bad-with-check-structure.js b/test/webkit/dfg-to-string-toString-becomes-bad-with-check-structure.js
new file mode 100644 (file)
index 0000000..e37fa99
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that the DFG checks that the toString method didn't become bad even if the StringObject already had a CheckStructure."
+);
+
+function foo() {
+    return String(this);
+}
+
+for (var i = 0; i < 100; ++i) {
+    if (i == 99)
+        String.prototype.toString = function() { return 42; }
+    shouldBe("foo.call(new String(\"foo\"))", i >= 99 ? "\"42\"" : "\"foo\"");
+}
+
diff --git a/test/webkit/dfg-to-string-toString-becomes-bad-with-dictionary-string-prototype-expected.txt b/test/webkit/dfg-to-string-toString-becomes-bad-with-dictionary-string-prototype-expected.txt
new file mode 100644 (file)
index 0000000..3e11db9
--- /dev/null
@@ -0,0 +1,182 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is initially fine but then gets clobbered, and was a dictionary all along.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "hello"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS "" + foo("hello") is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-to-string-toString-becomes-bad-with-dictionary-string-prototype.js b/test/webkit/dfg-to-string-toString-becomes-bad-with-dictionary-string-prototype.js
new file mode 100644 (file)
index 0000000..6db3467
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is initially fine but then gets clobbered, and was a dictionary all along."
+);
+
+delete String.prototype.trim;
+delete String.prototype.toLowerCase;
+delete String.prototype.toLocaleUpperCase;
+
+for (var i = 0; i < 1000; ++i)
+    String.prototype["a" + i] = 42;
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+var expected = "\"hello\"";
+for (var i = 0; i < 150; ++i) {
+    if (i == 100) {
+        String.prototype.toString = function() { return 42; }
+        expected = "\"42\"";
+    }
+    shouldBe("\"\" + foo(\"hello\")", expected);
+}
+
diff --git a/test/webkit/dfg-to-string-toString-becomes-bad.js b/test/webkit/dfg-to-string-toString-becomes-bad.js
new file mode 100644 (file)
index 0000000..d15917a
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is initially fine but then gets clobbered."
+);
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+var expected = "\"hello\"";
+for (var i = 0; i < 150; ++i) {
+    if (i == 100) {
+        String.prototype.toString = function() { return 42; }
+        expected = "\"42\"";
+    }
+    shouldBe("\"\" + foo(\"hello\")", expected);
+}
+
diff --git a/test/webkit/dfg-to-string-toString-in-string-expected.txt b/test/webkit/dfg-to-string-toString-in-string-expected.txt
new file mode 100644 (file)
index 0000000..8529ae8
--- /dev/null
@@ -0,0 +1,182 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is fine but we define our own on the String object itself.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS "" + foo(argument) is "42"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-to-string-toString-in-string.js b/test/webkit/dfg-to-string-toString-in-string.js
new file mode 100644 (file)
index 0000000..17f5794
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is fine but we define our own on the String object itself."
+);
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+var argument = new String("hello");
+var expected = "\"hello\"";
+for (var i = 0; i < 150; ++i) {
+    if (i == 100) {
+        argument = new String("hello");
+        argument.toString = function() { return 42; }
+        expected = "\"42\"";
+    }
+    shouldBe("\"\" + foo(argument)", expected);
+}
+
diff --git a/test/webkit/dfg-to-string-valueOf-in-string-expected.txt b/test/webkit/dfg-to-string-valueOf-in-string-expected.txt
new file mode 100644 (file)
index 0000000..1e64890
--- /dev/null
@@ -0,0 +1,182 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that we do ToString conversions correctly when String.prototype.valueOf is fine but we define our own on the String object itself.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS "" + foo(argument) is "hello"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-to-string-valueOf-in-string.js b/test/webkit/dfg-to-string-valueOf-in-string.js
new file mode 100644 (file)
index 0000000..e591bf7
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that we do ToString conversions correctly when String.prototype.valueOf is fine but we define our own on the String object itself."
+);
+
+function foo(a) {
+    for (var i = 0; i < 100; ++i)
+        a = new String(a);
+    return a;
+}
+
+var argument = new String("hello");
+for (var i = 0; i < 150; ++i) {
+    if (i == 100) {
+        argument = new String("hello");
+        argument.valueOf = function() { return 42; }
+    }
+    shouldBe("\"\" + foo(argument)", "\"hello\"");
+}
+
diff --git a/test/webkit/dfg-uint32-to-number-expected.txt b/test/webkit/dfg-uint32-to-number-expected.txt
new file mode 100644 (file)
index 0000000..f3dc5cc
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that if the DFG fails to convert a uint32 to a number, it will OSR exit correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is 124500
+PASS foo({f:2147483648}, {f:32}) is 2147483648
+PASS foo({f:2147483648}, {f:31}) is 1
+PASS foo({f:2147483648}, {f:30}) is 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-uint32-to-number-in-middle-of-copy-propagation-expected.txt b/test/webkit/dfg-uint32-to-number-in-middle-of-copy-propagation-expected.txt
new file mode 100644 (file)
index 0000000..b7de585
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that UInt32ToNumber and OSR exit are aware of copy propagation and correctly recover both versions of a variable that was subject to a UInt32ToNumber cast.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS foo(-1) is [-1, 4294967295]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-uint32-to-number-in-middle-of-copy-propagation.js b/test/webkit/dfg-uint32-to-number-in-middle-of-copy-propagation.js
new file mode 100644 (file)
index 0000000..7705f03
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that UInt32ToNumber and OSR exit are aware of copy propagation and correctly recover both versions of a variable that was subject to a UInt32ToNumber cast."
+);
+
+function foo(b) {
+    var a = b | 0;
+    var x, y;
+    x = a;
+    y = a >>> 0;
+    return [x, y];
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo(-1)", "[-1, 4294967295]");
+
diff --git a/test/webkit/dfg-uint32-to-number-on-captured-variable-expected.txt b/test/webkit/dfg-uint32-to-number-on-captured-variable-expected.txt
new file mode 100644 (file)
index 0000000..8834bdd
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that storing the result of a uint32 to number conversion into a captured variable does not crash the compiler.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(0)() is 0
+PASS foo(1)() is 1
+PASS foo(2)() is 2
+PASS foo(3)() is 3
+PASS foo(4)() is 4
+PASS foo(5)() is 5
+PASS foo(6)() is 6
+PASS foo(7)() is 7
+PASS foo(8)() is 8
+PASS foo(9)() is 9
+PASS foo(10)() is 10
+PASS foo(11)() is 11
+PASS foo(12)() is 12
+PASS foo(13)() is 13
+PASS foo(14)() is 14
+PASS foo(15)() is 15
+PASS foo(16)() is 16
+PASS foo(17)() is 17
+PASS foo(18)() is 18
+PASS foo(19)() is 19
+PASS foo(20)() is 20
+PASS foo(21)() is 21
+PASS foo(22)() is 22
+PASS foo(23)() is 23
+PASS foo(24)() is 24
+PASS foo(25)() is 25
+PASS foo(26)() is 26
+PASS foo(27)() is 27
+PASS foo(28)() is 28
+PASS foo(29)() is 29
+PASS foo(30)() is 30
+PASS foo(31)() is 31
+PASS foo(32)() is 32
+PASS foo(33)() is 33
+PASS foo(34)() is 34
+PASS foo(35)() is 35
+PASS foo(36)() is 36
+PASS foo(37)() is 37
+PASS foo(38)() is 38
+PASS foo(39)() is 39
+PASS foo(40)() is 40
+PASS foo(41)() is 41
+PASS foo(42)() is 42
+PASS foo(43)() is 43
+PASS foo(44)() is 44
+PASS foo(45)() is 45
+PASS foo(46)() is 46
+PASS foo(47)() is 47
+PASS foo(48)() is 48
+PASS foo(49)() is 49
+PASS foo(50)() is 50
+PASS foo(51)() is 51
+PASS foo(52)() is 52
+PASS foo(53)() is 53
+PASS foo(54)() is 54
+PASS foo(55)() is 55
+PASS foo(56)() is 56
+PASS foo(57)() is 57
+PASS foo(58)() is 58
+PASS foo(59)() is 59
+PASS foo(60)() is 60
+PASS foo(61)() is 61
+PASS foo(62)() is 62
+PASS foo(63)() is 63
+PASS foo(64)() is 64
+PASS foo(65)() is 65
+PASS foo(66)() is 66
+PASS foo(67)() is 67
+PASS foo(68)() is 68
+PASS foo(69)() is 69
+PASS foo(70)() is 70
+PASS foo(71)() is 71
+PASS foo(72)() is 72
+PASS foo(73)() is 73
+PASS foo(74)() is 74
+PASS foo(75)() is 75
+PASS foo(76)() is 76
+PASS foo(77)() is 77
+PASS foo(78)() is 78
+PASS foo(79)() is 79
+PASS foo(80)() is 80
+PASS foo(81)() is 81
+PASS foo(82)() is 82
+PASS foo(83)() is 83
+PASS foo(84)() is 84
+PASS foo(85)() is 85
+PASS foo(86)() is 86
+PASS foo(87)() is 87
+PASS foo(88)() is 88
+PASS foo(89)() is 89
+PASS foo(90)() is 90
+PASS foo(91)() is 91
+PASS foo(92)() is 92
+PASS foo(93)() is 93
+PASS foo(94)() is 94
+PASS foo(95)() is 95
+PASS foo(96)() is 96
+PASS foo(97)() is 97
+PASS foo(98)() is 98
+PASS foo(99)() is 99
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-uint32-to-number-on-captured-variable.js b/test/webkit/dfg-uint32-to-number-on-captured-variable.js
new file mode 100644 (file)
index 0000000..ec2be1d
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that storing the result of a uint32 to number conversion into a captured variable does not crash the compiler."
+);
+
+function foo(a) {
+    var x = a >>> 0;
+    return (function() {
+        return x;
+    });
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo(" + i + ")()", "" + i);
+
diff --git a/test/webkit/dfg-uint32-to-number-skip-then-exit-expected.txt b/test/webkit/dfg-uint32-to-number-skip-then-exit-expected.txt
new file mode 100644 (file)
index 0000000..855312a
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that a skipped conversion of uint32 to number does not confuse OSR exit into thinking that the conversion is dead.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(i, 1, o) is 42
+PASS foo(i, 1, o) is 42
+PASS foo(i, 1, o) is 43
+PASS foo(i, 1, o) is 43
+PASS foo(i, 1, o) is 44
+PASS foo(i, 1, o) is 44
+PASS foo(i, 1, o) is 45
+PASS foo(i, 1, o) is 45
+PASS foo(i, 1, o) is 46
+PASS foo(i, 1, o) is 46
+PASS foo(i, 1, o) is 47
+PASS foo(i, 1, o) is 47
+PASS foo(i, 1, o) is 48
+PASS foo(i, 1, o) is 48
+PASS foo(i, 1, o) is 49
+PASS foo(i, 1, o) is 49
+PASS foo(i, 1, o) is 50
+PASS foo(i, 1, o) is 50
+PASS foo(i, 1, o) is 51
+PASS foo(i, 1, o) is 51
+PASS foo(i, 1, o) is 52
+PASS foo(i, 1, o) is 52
+PASS foo(i, 1, o) is 53
+PASS foo(i, 1, o) is 53
+PASS foo(i, 1, o) is 54
+PASS foo(i, 1, o) is 54
+PASS foo(i, 1, o) is 55
+PASS foo(i, 1, o) is 55
+PASS foo(i, 1, o) is 56
+PASS foo(i, 1, o) is 56
+PASS foo(i, 1, o) is 57
+PASS foo(i, 1, o) is 57
+PASS foo(i, 1, o) is 58
+PASS foo(i, 1, o) is 58
+PASS foo(i, 1, o) is 59
+PASS foo(i, 1, o) is 59
+PASS foo(i, 1, o) is 60
+PASS foo(i, 1, o) is 60
+PASS foo(i, 1, o) is 61
+PASS foo(i, 1, o) is 61
+PASS foo(i, 1, o) is 62
+PASS foo(i, 1, o) is 62
+PASS foo(i, 1, o) is 63
+PASS foo(i, 1, o) is 63
+PASS foo(i, 1, o) is 64
+PASS foo(i, 1, o) is 64
+PASS foo(i, 1, o) is 65
+PASS foo(i, 1, o) is 65
+PASS foo(i, 1, o) is 66
+PASS foo(i, 1, o) is 66
+PASS foo(i, 1, o) is 67
+PASS foo(i, 1, o) is 67
+PASS foo(i, 1, o) is 68
+PASS foo(i, 1, o) is 68
+PASS foo(i, 1, o) is 69
+PASS foo(i, 1, o) is 69
+PASS foo(i, 1, o) is 70
+PASS foo(i, 1, o) is 70
+PASS foo(i, 1, o) is 71
+PASS foo(i, 1, o) is 71
+PASS foo(i, 1, o) is 72
+PASS foo(i, 1, o) is 72
+PASS foo(i, 1, o) is 73
+PASS foo(i, 1, o) is 73
+PASS foo(i, 1, o) is 74
+PASS foo(i, 1, o) is 74
+PASS foo(i, 1, o) is 75
+PASS foo(i, 1, o) is 75
+PASS foo(i, 1, o) is 76
+PASS foo(i, 1, o) is 76
+PASS foo(i, 1, o) is 77
+PASS foo(i, 1, o) is 77
+PASS foo(i, 1, o) is 78
+PASS foo(i, 1, o) is 78
+PASS foo(i, 1, o) is 79
+PASS foo(i, 1, o) is 79
+PASS foo(i, 1, o) is 80
+PASS foo(i, 1, o) is 80
+PASS foo(i, 1, o) is 81
+PASS foo(i, 1, o) is 81
+PASS foo(i, 1, o) is 82
+PASS foo(i, 1, o) is 82
+PASS foo(i, 1, o) is 83
+PASS foo(i, 1, o) is 83
+PASS foo(i, 1, o) is 84
+PASS foo(i, 1, o) is 84
+PASS foo(i, 1, o) is 85
+PASS foo(i, 1, o) is 85
+PASS foo(i, 1, o) is 86
+PASS foo(i, 1, o) is 86
+PASS foo(i, 1, o) is 87
+PASS foo(i, 1, o) is 87
+PASS foo(i, 1, o) is 88
+PASS foo(i, 1, o) is 88
+PASS foo(i, 1, o) is 89
+PASS foo(i, 1, o) is 89
+PASS foo(i, 1, o) is 90
+PASS foo(i, 1, o) is 90
+PASS foo(i, 1, o) is 91
+PASS foo(i, 1, o) is 91
+PASS foo(i, 1, o) is 92
+PASS foo(i, 1, o) is 92
+PASS foo(i, 1, o) is 93
+PASS foo(i, 1, o) is 93
+PASS foo(i, 1, o) is 94
+PASS foo(i, 1, o) is 94
+PASS foo(i, 1, o) is 95
+PASS foo(i, 1, o) is 95
+PASS foo(i, 1, o) is 96
+PASS foo(i, 1, o) is 96
+PASS foo(i, 1, o) is 97
+PASS foo(i, 1, o) is 97
+PASS foo(i, 1, o) is 98
+PASS foo(i, 1, o) is 98
+PASS foo(i, 1, o) is 99
+PASS foo(i, 1, o) is 99
+PASS foo(i, 1, o) is 100
+PASS foo(i, 1, o) is 100
+PASS foo(i, 1, o) is 101
+PASS foo(i, 1, o) is 101
+PASS foo(i, 1, o) is 102
+PASS foo(i, 1, o) is 102
+PASS foo(i, 1, o) is 103
+PASS foo(i, 1, o) is 103
+PASS foo(i, 1, o) is 104
+PASS foo(i, 1, o) is 104
+PASS foo(i, 1, o) is 105
+PASS foo(i, 1, o) is 105
+PASS foo(i, 1, o) is 106
+PASS foo(i, 1, o) is 106
+PASS foo(i, 1, o) is 107
+PASS foo(i, 1, o) is 107
+PASS foo(i, 1, o) is 108
+PASS foo(i, 1, o) is 108
+PASS foo(i, 1, o) is 109
+PASS foo(i, 1, o) is 109
+PASS foo(i, 1, o) is 110
+PASS foo(i, 1, o) is 110
+PASS foo(i, 1, o) is 111
+PASS foo(i, 1, o) is 111
+PASS foo(i, 1, o) is 112
+PASS foo(i, 1, o) is 112
+PASS foo(i, 1, o) is 113
+PASS foo(i, 1, o) is 113
+PASS foo(i, 1, o) is 114
+PASS foo(i, 1, o) is 114
+PASS foo(i, 1, o) is 115
+PASS foo(i, 1, o) is 115
+PASS foo(i, 1, o) is 116
+PASS foo(i, 1, o) is 116
+PASS foo(i, 1, o) is 118
+PASS foo(i, 1, o) is 118
+PASS foo(i, 1, o) is 119
+PASS foo(i, 1, o) is 119
+PASS foo(i, 1, o) is 120
+PASS foo(i, 1, o) is 120
+PASS foo(i, 1, o) is 121
+PASS foo(i, 1, o) is 121
+PASS foo(i, 1, o) is 122
+PASS foo(i, 1, o) is 122
+PASS foo(i, 1, o) is 123
+PASS foo(i, 1, o) is 123
+PASS foo(i, 1, o) is 124
+PASS foo(i, 1, o) is 124
+PASS foo(i, 1, o) is 125
+PASS foo(i, 1, o) is 125
+PASS foo(i, 1, o) is 126
+PASS foo(i, 1, o) is 126
+PASS foo(i, 1, o) is 127
+PASS foo(i, 1, o) is 127
+PASS foo(i, 1, o) is 128
+PASS foo(i, 1, o) is 128
+PASS foo(i, 1, o) is 129
+PASS foo(i, 1, o) is 129
+PASS foo(i, 1, o) is 130
+PASS foo(i, 1, o) is 130
+PASS foo(i, 1, o) is 131
+PASS foo(i, 1, o) is 131
+PASS foo(i, 1, o) is 132
+PASS foo(i, 1, o) is 132
+PASS foo(i, 1, o) is 133
+PASS foo(i, 1, o) is 133
+PASS foo(i, 1, o) is 134
+PASS foo(i, 1, o) is 134
+PASS foo(i, 1, o) is 135
+PASS foo(i, 1, o) is 135
+PASS foo(i, 1, o) is 136
+PASS foo(i, 1, o) is 136
+PASS foo(i, 1, o) is 137
+PASS foo(i, 1, o) is 137
+PASS foo(i, 1, o) is 138
+PASS foo(i, 1, o) is 138
+PASS foo(i, 1, o) is 139
+PASS foo(i, 1, o) is 139
+PASS foo(i, 1, o) is 140
+PASS foo(i, 1, o) is 140
+PASS foo(i, 1, o) is 141
+PASS foo(i, 1, o) is 141
+PASS foo(i, 1, o) is 142
+PASS foo(i, 1, o) is 142
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-uint32-to-number-skip-then-exit.js b/test/webkit/dfg-uint32-to-number-skip-then-exit.js
new file mode 100644 (file)
index 0000000..13029d2
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that a skipped conversion of uint32 to number does not confuse OSR exit into thinking that the conversion is dead."
+);
+
+function foo(a, b, o) {
+    var x = a >>> b;
+    return o.f + (x | 0);
+}
+
+for (var i = 0; i < 200; ++i) {
+    var o;
+    var expected;
+    if (i < 150) {
+        o = {f:42};
+        expected = 42 + ((i / 2) | 0);
+    } else {
+        o = {f:43, g:44};
+        expected = 43 + ((i / 2) | 0);
+    }
+    shouldBe("foo(i, 1, o)", "" + expected);
+}
+
diff --git a/test/webkit/dfg-uint32-to-number.js b/test/webkit/dfg-uint32-to-number.js
new file mode 100644 (file)
index 0000000..f7c11d1
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that if the DFG fails to convert a uint32 to a number, it will OSR exit correctly."
+);
+
+function foo(a,b) {
+    return a.f >>> b.f;
+}
+
+var result = 0;
+for (var i = 0; i < 1000; ++i) {
+    result += foo({f:i + 0.5}, {f:2});
+}
+
+shouldBe("result", "124500");
+
+shouldBe("foo({f:2147483648}, {f:32})", "2147483648");
+shouldBe("foo({f:2147483648}, {f:31})", "1");
+shouldBe("foo({f:2147483648}, {f:30})", "2");
+
diff --git a/test/webkit/dfg-uint32array-overflow-constant-expected.txt b/test/webkit/dfg-uint32array-overflow-constant-expected.txt
new file mode 100644 (file)
index 0000000..b965f6e
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that storing a value that is outside of the int32 range into a Uint32Array results in correct wrap-around.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS array[0] is 0x8005465c
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-uint32array-overflow-constant.js b/test/webkit/dfg-uint32array-overflow-constant.js
new file mode 100644 (file)
index 0000000..1de13a3
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that storing a value that is outside of the int32 range into a Uint32Array results in correct wrap-around."
+);
+
+function foo(a) {
+    a[0] = 0x8005465c;
+}
+
+var array = new Uint32Array(1);
+
+for (var i = 0; i < 200; ++i) {
+    foo(array);
+    shouldBe("array[0]", "0x8005465c");
+}
+
diff --git a/test/webkit/dfg-uint8clampedarray-out-of-bounds-put-by-val-alias-expected.txt b/test/webkit/dfg-uint8clampedarray-out-of-bounds-put-by-val-alias-expected.txt
new file mode 100644 (file)
index 0000000..8c92cad
--- /dev/null
@@ -0,0 +1,232 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that out-of-bounds stores to a Uint8ClampedArray that are aliased to out-of-bounds loads don't crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS foo(array, 100000000, 42) is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-uint8clampedarray-out-of-bounds-put-by-val-alias.js b/test/webkit/dfg-uint8clampedarray-out-of-bounds-put-by-val-alias.js
new file mode 100644 (file)
index 0000000..8c0974c
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that out-of-bounds stores to a Uint8ClampedArray that are aliased to out-of-bounds loads don't crash."
+);
+
+function foo(a, i, v)
+{
+    var result = a[i];
+    a[i] = v;
+    return result;
+}
+
+for (var i = 0; i < 200; ++i) {
+    var array = new Uint8ClampedArray(1);
+    shouldBe("foo(array, 100000000, 42)", "" + (void 0));
+}
diff --git a/test/webkit/dfg-value-to-int32-with-side-effect-expected.txt b/test/webkit/dfg-value-to-int32-with-side-effect-expected.txt
new file mode 100644 (file)
index 0000000..9f6e2c7
--- /dev/null
@@ -0,0 +1,233 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that a side-effecting ValueToInt32 only executes once when there is an OSR exit.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS result.length is 2
+PASS result[0] is 5
+PASS counter is 100
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-value-to-int32-with-side-effect.js b/test/webkit/dfg-value-to-int32-with-side-effect.js
new file mode 100644 (file)
index 0000000..d001bab
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that a side-effecting ValueToInt32 only executes once when there is an OSR exit."
+);
+
+function foo(a, b) {
+    var result = a | b.f;
+    return [result, a];
+}
+
+var counter = 0;
+for (var i = 0; i < 100; ++i) {
+    var result = foo({valueOf:function() { counter++; return 1; }}, {f:i == 99 ? 5.5 : 5});
+    shouldBe("result.length", "2");
+    shouldBe("result[0]", "5");
+}
+
+shouldBe("counter", "100");
diff --git a/test/webkit/dfg-weak-js-constant-silent-fill-expected.txt b/test/webkit/dfg-weak-js-constant-silent-fill-expected.txt
new file mode 100644 (file)
index 0000000..fd54f3a
--- /dev/null
@@ -0,0 +1,3032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that DFG silent spill and fill of WeakJSConstants does not result in nonsense.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS o1.f is 42
+PASS o2.f is false
+PASS o3.f is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dfg-weak-js-constant-silent-fill.js b/test/webkit/dfg-weak-js-constant-silent-fill.js
new file mode 100644 (file)
index 0000000..fa06a90
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that DFG silent spill and fill of WeakJSConstants does not result in nonsense."
+);
+
+function foo(a, b, c, d)
+{
+    a.f = 42; // WeakJSConstants corresponding to the o.f transition get created here.
+    var x = !d; // Silent spilling and filling happens here.
+    b.f = x; // The WeakJSConstants get reused here.
+    var y = !d; // Silent spilling and filling happens here.
+    c.f = y; // The WeakJSConstants get reused here.
+}
+
+var Empty = "";
+
+for (var i = 0; i < 1000; ++i) {
+    var o1 = new Object();
+    var o2 = new Object();
+    var o3 = new Object();
+    eval(Empty + "foo(o1, o2, o3, \"stuff\")");
+    shouldBe("o1.f", "42");
+    shouldBe("o2.f", "false");
+    shouldBe("o3.f", "false");
+}
+
diff --git a/test/webkit/dictionary-no-cache-expected.txt b/test/webkit/dictionary-no-cache-expected.txt
new file mode 100644 (file)
index 0000000..b50a56d
--- /dev/null
@@ -0,0 +1,39 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure that we handle caching of prototype chains containing dictionaries.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foundNewPrototypeProperty is true
+PASS foundRemovedPrototypeProperty is false
+PASS calledNewPrototypeSetter is true
+PASS getTestProperty(test4) is "on prototype"
+PASS getTestProperty(test4) is "on self"
+PASS getTestProperty(test5) is "on prototype's prototype"
+PASS getTestProperty(test5) is "on self"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dictionary-no-cache.js b/test/webkit/dictionary-no-cache.js
new file mode 100644 (file)
index 0000000..cb71f35
--- /dev/null
@@ -0,0 +1,112 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure that we handle caching of prototype chains containing dictionaries.");
+
+var Test = function(){};
+
+var methodCount = 65;
+
+for (var i = 0; i < methodCount; i++){
+    Test.prototype['myMethod' + i] = function(){};
+}
+
+var test1 = new Test();
+
+for (var k in test1);
+
+Test.prototype.myAdditionalMethod = function(){};
+var test2 = new Test();
+var j = k;
+var foundNewPrototypeProperty = false;
+for (var k in test2){
+    if ("myAdditionalMethod" == k) foundNewPrototypeProperty = true;
+}
+shouldBeTrue('foundNewPrototypeProperty');
+
+var Test = function(){};
+for (var i = 0; i < methodCount; i++){
+    Test.prototype['myMethod' + i] = function(){};
+}
+var test1 = new Test();
+
+for (var k in test1);
+
+delete (Test.prototype)[k]
+var test2 = new Test();
+var j = k;
+var foundRemovedPrototypeProperty = false;
+for (var k in test2){
+    if (j == k) foundRemovedPrototypeProperty = true;
+}
+shouldBeFalse("foundRemovedPrototypeProperty");
+
+var Test = function(){};
+for (var i = 0; i < methodCount; i++){
+    Test.prototype['myMethod' + i] = function(){};
+}
+
+function update(test) {
+    test.newProperty = true;
+}
+var test1 = new Test();
+update(test1);
+
+var test2 = new Test();
+update(test2);
+
+var test3 = new Test();
+update(test3);
+var calledNewPrototypeSetter = false;
+Test.prototype.__defineSetter__("newProperty", function(){ calledNewPrototypeSetter = true; });
+var test4 = new Test();
+update(test4);
+shouldBeTrue('calledNewPrototypeSetter');
+
+var test4 = {__proto__:{prop:"on prototype"}};
+for (var i = 0; i < 200; i++)
+    test4[i]=[i];
+
+var test5 = {__proto__:{__proto__:{prop:"on prototype's prototype"}}};
+for (var i = 0; i < 200; i++)
+    test5[i]=[i];
+
+getTestProperty = function(o) {
+    return o.prop;
+}
+
+getTestProperty(test4);
+getTestProperty(test4);
+shouldBe("getTestProperty(test4)", '"on prototype"');
+test4.prop = "on self";
+shouldBe("getTestProperty(test4)", '"on self"');
+
+getTestProperty = function(o) {
+    return o.prop;
+}
+
+getTestProperty(test5);
+getTestProperty(test5);
+shouldBe("getTestProperty(test5)", '"on prototype\'s prototype"');
+test5.prop = "on self";
+shouldBe("getTestProperty(test5)", '"on self"');
diff --git a/test/webkit/dictionary-prototype-caching-expected.txt b/test/webkit/dictionary-prototype-caching-expected.txt
new file mode 100644 (file)
index 0000000..af01bb6
--- /dev/null
@@ -0,0 +1,39 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct behaviour of prototype caching with dictionary prototypes
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS protoTest(o) is 'PASS'
+PASS protoTest(o) is undefined.
+PASS protoKeys is [1,2,3]
+PASS protoKeys is [1,2,3]
+PASS testFunction(subclass1) is true
+PASS testFunction(subclass2) is true
+PASS testFunction(subclass2) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/dictionary-prototype-caching.js b/test/webkit/dictionary-prototype-caching.js
new file mode 100644 (file)
index 0000000..371cde8
--- /dev/null
@@ -0,0 +1,95 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct behaviour of prototype caching with dictionary prototypes");
+
+function protoTest(o) {
+    return o.protoProp;
+}
+
+var proto = {protoProp: "PASS", propToRemove: "foo"};
+var o = { __proto__: proto };
+
+delete proto.propToRemove;
+
+// Prototype lookup caching will attempt to convert proto back to an ordinary structure
+protoTest(o);
+protoTest(o);
+protoTest(o);
+shouldBe("protoTest(o)", "'PASS'");
+delete proto.protoProp;
+proto.fakeProtoProp = "FAIL";
+shouldBeUndefined("protoTest(o)");
+
+function protoTest2(o) {
+    return o.b;
+}
+
+var proto = {a:1, b:"meh", c:2};
+var o = { __proto__: proto };
+
+delete proto.b;
+proto.d = 3;
+protoTest2(o);
+protoTest2(o);
+protoTest2(o);
+var protoKeys = [];
+for (var i in proto)
+    protoKeys.push(proto[i]);
+
+shouldBe("protoKeys", "[1,2,3]");
+
+function protoTest3(o) {
+    return o.b;
+}
+
+var proto = {a:1, b:"meh", c:2};
+var o = { __proto__: proto };
+
+delete proto.b;
+protoTest2(o);
+protoTest2(o);
+protoTest2(o);
+proto.d = 3;
+var protoKeys = [];
+for (var i in proto)
+    protoKeys.push(proto[i]);
+
+shouldBe("protoKeys", "[1,2,3]");
+
+function testFunction(o) {
+    return o.test;
+}
+
+var proto = { test: true };
+var subclass1 = { __proto__: proto };
+var subclass2 = { __proto__: proto };
+for (var i = 0; i < 500; i++)
+    subclass2["a"+i]="a"+i;
+
+testFunction(subclass1);
+shouldBeTrue("testFunction(subclass1)");
+shouldBeTrue("testFunction(subclass2)");
+proto.test = false
+subclass2.test = true;
+shouldBeTrue("testFunction(subclass2)");
diff --git a/test/webkit/do-while-semicolon-expected.txt b/test/webkit/do-while-semicolon-expected.txt
new file mode 100644 (file)
index 0000000..065aba0
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that toString() round-trip on a function that has do..while in JavaScript does not insert extra semicolon.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS ueuf1 is uf1
+PASS ueuf2 is uf2
+PASS ueuf3 is uf3
+PASS ueuf4 is uf4
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/do-while-semicolon.js b/test/webkit/do-while-semicolon.js
new file mode 100644 (file)
index 0000000..cd7cf4c
--- /dev/null
@@ -0,0 +1,67 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that toString() round-trip on a function that has do..while in JavaScript does not insert extra semicolon."
+);
+
+function f1() {
+    do {} while(0);
+}
+
+function f2() {
+    do {} while(0)
+}
+
+function f3() {
+    do {} while(0)   ;
+}
+
+function f4() {
+    do {} while(0)  /*empty*/ ;
+}
+
+
+
+if (typeof uneval == "undefined")
+    uneval = function(x) { return '(' + x.toString()+ ')'; }
+
+
+uf1 = uneval(f1);
+ueuf1 = uneval(eval(uneval(f1)));
+
+uf2 = uneval(f2);
+ueuf2 = uneval(eval(uneval(f2)));
+
+uf3 = uneval(f3);
+ueuf3 = uneval(eval(uneval(f3)));
+
+uf4 = uneval(f4);
+ueuf4 = uneval(eval(uneval(f4)));
+
+
+
+shouldBe("ueuf1", "uf1");
+shouldBe("ueuf2", "uf2");
+shouldBe("ueuf3", "uf3");
+shouldBe("ueuf4", "uf4");
diff --git a/test/webkit/duplicate-param-crash-expected.txt b/test/webkit/duplicate-param-crash-expected.txt
new file mode 100644 (file)
index 0000000..083e6f0
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests to ensure that activations are built correctly in the face of duplicate parameter names and do not cause crashes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test1("success")() is "success"
+PASS test2("success", "success", "success", "success", "success", "success", "success")() is "success"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/duplicate-param-crash.js b/test/webkit/duplicate-param-crash.js
new file mode 100644 (file)
index 0000000..29e42fc
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests to ensure that activations are built correctly in the face of duplicate parameter names and do not cause crashes.'
+);
+
+function test1(a, b, b, b, b, b, b) {
+    return function() {
+        return a;
+    }
+}
+
+shouldBe('test1("success")()', '"success"');
+
+function test2(a, a, a, a, a, a, b) {
+    return function() {
+        return b;
+    }
+}
+
+shouldBe('test2("success", "success", "success", "success", "success", "success", "success")()', '"success"');
diff --git a/test/webkit/duplicate-param-gc-crash-expected.txt b/test/webkit/duplicate-param-gc-crash-expected.txt
new file mode 100644 (file)
index 0000000..a842226
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests to ensure that activations are built correctly in the face of duplicate parameter names and do not cause crashes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test1Closure() is "success"
+PASS test2Closure() is "success"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/duplicate-param-gc-crash.js b/test/webkit/duplicate-param-gc-crash.js
new file mode 100644 (file)
index 0000000..3436a94
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests to ensure that activations are built correctly in the face of duplicate parameter names and do not cause crashes.'
+);
+
+function gc()
+{
+    if (this.GCController)
+        GCController.collect();
+    else
+        for (var i = 0; i < 10000; ++i) // Allocate a sufficient number of objects to force a GC.
+            ({});
+}
+
+function eatRegisters(param)
+{
+    if (param > 10)
+        return;
+    eatRegisters(param + 1);
+}
+
+function test1(a, b, b, b, b, b, b) {
+    return function() {
+        return a[0];
+    }
+}
+
+var test1Closure = test1(["success"]);
+
+var extra = test1("success");
+eatRegisters(0);
+gc();
+
+shouldBe('test1Closure()', '"success"');
+
+function test2(a, a, a, a, a, a, b) {
+    return function() {
+        return b[0];
+    }
+}
+
+var test2Closure = test2("success", "success", "success", "success", "success", "success", ["success"]);
+extra =  test2("success", "success", "success", "success", "success", "success", ["success"]);
+
+eatRegisters(0);
+gc();
+
+shouldBe('test2Closure()', '"success"');
diff --git a/test/webkit/enter-dictionary-indexing-mode-with-blank-indexing-type-expected.txt b/test/webkit/enter-dictionary-indexing-mode-with-blank-indexing-type-expected.txt
new file mode 100644 (file)
index 0000000..09b9612
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that putting an object into dictionary mode when it has a blank indexing type doesn't cause us to crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Object.isFrozen(Array.prototype) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/enter-dictionary-indexing-mode-with-blank-indexing-type.js b/test/webkit/enter-dictionary-indexing-mode-with-blank-indexing-type.js
new file mode 100644 (file)
index 0000000..4a95d84
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that putting an object into dictionary mode when it has a blank indexing type doesn't cause us to crash."
+);
+
+// Freezing the Array prototype causes us to create ArrayStorage on the prototype, which has a blank indexing type.
+Object.freeze(Array.prototype);
+
+shouldBe("Object.isFrozen(Array.prototype)", "true");
diff --git a/test/webkit/equality-expected.txt b/test/webkit/equality-expected.txt
new file mode 100644 (file)
index 0000000..ee337df
--- /dev/null
@@ -0,0 +1,832 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for equality of many combinations types.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 0 == 0 is true
+PASS 0 == 1 is false
+PASS 0 == 0.1 is false
+PASS 0 == 2 is false
+PASS 0 == 3 is false
+PASS 0 == 4 is false
+PASS 0 == 5 is false
+PASS 0 == 6 is false
+PASS 0 == 7 is false
+PASS 0 == -0 is true
+PASS 0 == "0" is true
+PASS 0 == "1" is false
+PASS 0 == "0.1" is false
+PASS 0 == "-0" is true
+PASS 0 == null is false
+PASS 0 == undefined is false
+PASS 0 == false is true
+PASS 0 == true is false
+PASS 0 == new String("0") is true
+PASS 0 == new Object is false
+PASS 1 == 0 is false
+PASS 1 == 1 is true
+PASS 1 == 0.1 is false
+PASS 1 == 2 is false
+PASS 1 == 3 is false
+PASS 1 == 4 is false
+PASS 1 == 5 is false
+PASS 1 == 6 is false
+PASS 1 == 7 is false
+PASS 1 == -0 is false
+PASS 1 == "0" is false
+PASS 1 == "1" is true
+PASS 1 == "0.1" is false
+PASS 1 == "-0" is false
+PASS 1 == null is false
+PASS 1 == undefined is false
+PASS 1 == false is false
+PASS 1 == true is true
+PASS 1 == new String("0") is false
+PASS 1 == new Object is false
+PASS 0.1 == 0 is false
+PASS 0.1 == 1 is false
+PASS 0.1 == 0.1 is true
+PASS 0.1 == 2 is false
+PASS 0.1 == 3 is false
+PASS 0.1 == 4 is false
+PASS 0.1 == 5 is false
+PASS 0.1 == 6 is false
+PASS 0.1 == 7 is false
+PASS 0.1 == -0 is false
+PASS 0.1 == "0" is false
+PASS 0.1 == "1" is false
+PASS 0.1 == "0.1" is true
+PASS 0.1 == "-0" is false
+PASS 0.1 == null is false
+PASS 0.1 == undefined is false
+PASS 0.1 == false is false
+PASS 0.1 == true is false
+PASS 0.1 == new String("0") is false
+PASS 0.1 == new Object is false
+PASS 2 == 0 is false
+PASS 2 == 1 is false
+PASS 2 == 0.1 is false
+PASS 2 == 2 is true
+PASS 2 == 3 is false
+PASS 2 == 4 is false
+PASS 2 == 5 is false
+PASS 2 == 6 is false
+PASS 2 == 7 is false
+PASS 2 == -0 is false
+PASS 2 == "0" is false
+PASS 2 == "1" is false
+PASS 2 == "0.1" is false
+PASS 2 == "-0" is false
+PASS 2 == null is false
+PASS 2 == undefined is false
+PASS 2 == false is false
+PASS 2 == true is false
+PASS 2 == new String("0") is false
+PASS 2 == new Object is false
+PASS 3 == 0 is false
+PASS 3 == 1 is false
+PASS 3 == 0.1 is false
+PASS 3 == 2 is false
+PASS 3 == 3 is true
+PASS 3 == 4 is false
+PASS 3 == 5 is false
+PASS 3 == 6 is false
+PASS 3 == 7 is false
+PASS 3 == -0 is false
+PASS 3 == "0" is false
+PASS 3 == "1" is false
+PASS 3 == "0.1" is false
+PASS 3 == "-0" is false
+PASS 3 == null is false
+PASS 3 == undefined is false
+PASS 3 == false is false
+PASS 3 == true is false
+PASS 3 == new String("0") is false
+PASS 3 == new Object is false
+PASS 4 == 0 is false
+PASS 4 == 1 is false
+PASS 4 == 0.1 is false
+PASS 4 == 2 is false
+PASS 4 == 3 is false
+PASS 4 == 4 is true
+PASS 4 == 5 is false
+PASS 4 == 6 is false
+PASS 4 == 7 is false
+PASS 4 == -0 is false
+PASS 4 == "0" is false
+PASS 4 == "1" is false
+PASS 4 == "0.1" is false
+PASS 4 == "-0" is false
+PASS 4 == null is false
+PASS 4 == undefined is false
+PASS 4 == false is false
+PASS 4 == true is false
+PASS 4 == new String("0") is false
+PASS 4 == new Object is false
+PASS 5 == 0 is false
+PASS 5 == 1 is false
+PASS 5 == 0.1 is false
+PASS 5 == 2 is false
+PASS 5 == 3 is false
+PASS 5 == 4 is false
+PASS 5 == 5 is true
+PASS 5 == 6 is false
+PASS 5 == 7 is false
+PASS 5 == -0 is false
+PASS 5 == "0" is false
+PASS 5 == "1" is false
+PASS 5 == "0.1" is false
+PASS 5 == "-0" is false
+PASS 5 == null is false
+PASS 5 == undefined is false
+PASS 5 == false is false
+PASS 5 == true is false
+PASS 5 == new String("0") is false
+PASS 5 == new Object is false
+PASS 6 == 0 is false
+PASS 6 == 1 is false
+PASS 6 == 0.1 is false
+PASS 6 == 2 is false
+PASS 6 == 3 is false
+PASS 6 == 4 is false
+PASS 6 == 5 is false
+PASS 6 == 6 is true
+PASS 6 == 7 is false
+PASS 6 == -0 is false
+PASS 6 == "0" is false
+PASS 6 == "1" is false
+PASS 6 == "0.1" is false
+PASS 6 == "-0" is false
+PASS 6 == null is false
+PASS 6 == undefined is false
+PASS 6 == false is false
+PASS 6 == true is false
+PASS 6 == new String("0") is false
+PASS 6 == new Object is false
+PASS 7 == 0 is false
+PASS 7 == 1 is false
+PASS 7 == 0.1 is false
+PASS 7 == 2 is false
+PASS 7 == 3 is false
+PASS 7 == 4 is false
+PASS 7 == 5 is false
+PASS 7 == 6 is false
+PASS 7 == 7 is true
+PASS 7 == -0 is false
+PASS 7 == "0" is false
+PASS 7 == "1" is false
+PASS 7 == "0.1" is false
+PASS 7 == "-0" is false
+PASS 7 == null is false
+PASS 7 == undefined is false
+PASS 7 == false is false
+PASS 7 == true is false
+PASS 7 == new String("0") is false
+PASS 7 == new Object is false
+PASS -0 == 0 is true
+PASS -0 == 1 is false
+PASS -0 == 0.1 is false
+PASS -0 == 2 is false
+PASS -0 == 3 is false
+PASS -0 == 4 is false
+PASS -0 == 5 is false
+PASS -0 == 6 is false
+PASS -0 == 7 is false
+PASS -0 == -0 is true
+PASS -0 == "0" is true
+PASS -0 == "1" is false
+PASS -0 == "0.1" is false
+PASS -0 == "-0" is true
+PASS -0 == null is false
+PASS -0 == undefined is false
+PASS -0 == false is true
+PASS -0 == true is false
+PASS -0 == new String("0") is true
+PASS -0 == new Object is false
+PASS "0" == 0 is true
+PASS "0" == 1 is false
+PASS "0" == 0.1 is false
+PASS "0" == 2 is false
+PASS "0" == 3 is false
+PASS "0" == 4 is false
+PASS "0" == 5 is false
+PASS "0" == 6 is false
+PASS "0" == 7 is false
+PASS "0" == -0 is true
+PASS "0" == "0" is true
+PASS "0" == "1" is false
+PASS "0" == "0.1" is false
+PASS "0" == "-0" is false
+PASS "0" == null is false
+PASS "0" == undefined is false
+PASS "0" == false is true
+PASS "0" == true is false
+PASS "0" == new String("0") is true
+PASS "0" == new Object is false
+PASS "1" == 0 is false
+PASS "1" == 1 is true
+PASS "1" == 0.1 is false
+PASS "1" == 2 is false
+PASS "1" == 3 is false
+PASS "1" == 4 is false
+PASS "1" == 5 is false
+PASS "1" == 6 is false
+PASS "1" == 7 is false
+PASS "1" == -0 is false
+PASS "1" == "0" is false
+PASS "1" == "1" is true
+PASS "1" == "0.1" is false
+PASS "1" == "-0" is false
+PASS "1" == null is false
+PASS "1" == undefined is false
+PASS "1" == false is false
+PASS "1" == true is true
+PASS "1" == new String("0") is false
+PASS "1" == new Object is false
+PASS "0.1" == 0 is false
+PASS "0.1" == 1 is false
+PASS "0.1" == 0.1 is true
+PASS "0.1" == 2 is false
+PASS "0.1" == 3 is false
+PASS "0.1" == 4 is false
+PASS "0.1" == 5 is false
+PASS "0.1" == 6 is false
+PASS "0.1" == 7 is false
+PASS "0.1" == -0 is false
+PASS "0.1" == "0" is false
+PASS "0.1" == "1" is false
+PASS "0.1" == "0.1" is true
+PASS "0.1" == "-0" is false
+PASS "0.1" == null is false
+PASS "0.1" == undefined is false
+PASS "0.1" == false is false
+PASS "0.1" == true is false
+PASS "0.1" == new String("0") is false
+PASS "0.1" == new Object is false
+PASS "-0" == 0 is true
+PASS "-0" == 1 is false
+PASS "-0" == 0.1 is false
+PASS "-0" == 2 is false
+PASS "-0" == 3 is false
+PASS "-0" == 4 is false
+PASS "-0" == 5 is false
+PASS "-0" == 6 is false
+PASS "-0" == 7 is false
+PASS "-0" == -0 is true
+PASS "-0" == "0" is false
+PASS "-0" == "1" is false
+PASS "-0" == "0.1" is false
+PASS "-0" == "-0" is true
+PASS "-0" == null is false
+PASS "-0" == undefined is false
+PASS "-0" == false is true
+PASS "-0" == true is false
+PASS "-0" == new String("0") is false
+PASS "-0" == new Object is false
+PASS null == 0 is false
+PASS null == 1 is false
+PASS null == 0.1 is false
+PASS null == 2 is false
+PASS null == 3 is false
+PASS null == 4 is false
+PASS null == 5 is false
+PASS null == 6 is false
+PASS null == 7 is false
+PASS null == -0 is false
+PASS null == "0" is false
+PASS null == "1" is false
+PASS null == "0.1" is false
+PASS null == "-0" is false
+PASS null == null is true
+PASS null == undefined is true
+PASS null == false is false
+PASS null == true is false
+PASS null == new String("0") is false
+PASS null == new Object is false
+PASS undefined == 0 is false
+PASS undefined == 1 is false
+PASS undefined == 0.1 is false
+PASS undefined == 2 is false
+PASS undefined == 3 is false
+PASS undefined == 4 is false
+PASS undefined == 5 is false
+PASS undefined == 6 is false
+PASS undefined == 7 is false
+PASS undefined == -0 is false
+PASS undefined == "0" is false
+PASS undefined == "1" is false
+PASS undefined == "0.1" is false
+PASS undefined == "-0" is false
+PASS undefined == null is true
+PASS undefined == undefined is true
+PASS undefined == false is false
+PASS undefined == true is false
+PASS undefined == new String("0") is false
+PASS undefined == new Object is false
+PASS false == 0 is true
+PASS false == 1 is false
+PASS false == 0.1 is false
+PASS false == 2 is false
+PASS false == 3 is false
+PASS false == 4 is false
+PASS false == 5 is false
+PASS false == 6 is false
+PASS false == 7 is false
+PASS false == -0 is true
+PASS false == "0" is true
+PASS false == "1" is false
+PASS false == "0.1" is false
+PASS false == "-0" is true
+PASS false == null is false
+PASS false == undefined is false
+PASS false == false is true
+PASS false == true is false
+PASS false == new String("0") is true
+PASS false == new Object is false
+PASS true == 0 is false
+PASS true == 1 is true
+PASS true == 0.1 is false
+PASS true == 2 is false
+PASS true == 3 is false
+PASS true == 4 is false
+PASS true == 5 is false
+PASS true == 6 is false
+PASS true == 7 is false
+PASS true == -0 is false
+PASS true == "0" is false
+PASS true == "1" is true
+PASS true == "0.1" is false
+PASS true == "-0" is false
+PASS true == null is false
+PASS true == undefined is false
+PASS true == false is false
+PASS true == true is true
+PASS true == new String("0") is false
+PASS true == new Object is false
+PASS new String("0") == 0 is true
+PASS new String("0") == 1 is false
+PASS new String("0") == 0.1 is false
+PASS new String("0") == 2 is false
+PASS new String("0") == 3 is false
+PASS new String("0") == 4 is false
+PASS new String("0") == 5 is false
+PASS new String("0") == 6 is false
+PASS new String("0") == 7 is false
+PASS new String("0") == -0 is true
+PASS new String("0") == "0" is true
+PASS new String("0") == "1" is false
+PASS new String("0") == "0.1" is false
+PASS new String("0") == "-0" is false
+PASS new String("0") == null is false
+PASS new String("0") == undefined is false
+PASS new String("0") == false is true
+PASS new String("0") == true is false
+PASS new String("0") == new String("0") is false
+PASS new String("0") == new Object is false
+PASS new Object == 0 is false
+PASS new Object == 1 is false
+PASS new Object == 0.1 is false
+PASS new Object == 2 is false
+PASS new Object == 3 is false
+PASS new Object == 4 is false
+PASS new Object == 5 is false
+PASS new Object == 6 is false
+PASS new Object == 7 is false
+PASS new Object == -0 is false
+PASS new Object == "0" is false
+PASS new Object == "1" is false
+PASS new Object == "0.1" is false
+PASS new Object == "-0" is false
+PASS new Object == null is false
+PASS new Object == undefined is false
+PASS new Object == false is false
+PASS new Object == true is false
+PASS new Object == new String("0") is false
+PASS new Object == new Object is false
+PASS 0 === 0 is true
+PASS 0 === 1 is false
+PASS 0 === 0.1 is false
+PASS 0 === 2 is false
+PASS 0 === 3 is false
+PASS 0 === 4 is false
+PASS 0 === 5 is false
+PASS 0 === 6 is false
+PASS 0 === 7 is false
+PASS 0 === -0 is true
+PASS 0 === "0" is false
+PASS 0 === "1" is false
+PASS 0 === "0.1" is false
+PASS 0 === "-0" is false
+PASS 0 === null is false
+PASS 0 === undefined is false
+PASS 0 === false is false
+PASS 0 === true is false
+PASS 0 === new String("0") is false
+PASS 0 === new Object is false
+PASS 1 === 0 is false
+PASS 1 === 1 is true
+PASS 1 === 0.1 is false
+PASS 1 === 2 is false
+PASS 1 === 3 is false
+PASS 1 === 4 is false
+PASS 1 === 5 is false
+PASS 1 === 6 is false
+PASS 1 === 7 is false
+PASS 1 === -0 is false
+PASS 1 === "0" is false
+PASS 1 === "1" is false
+PASS 1 === "0.1" is false
+PASS 1 === "-0" is false
+PASS 1 === null is false
+PASS 1 === undefined is false
+PASS 1 === false is false
+PASS 1 === true is false
+PASS 1 === new String("0") is false
+PASS 1 === new Object is false
+PASS 0.1 === 0 is false
+PASS 0.1 === 1 is false
+PASS 0.1 === 0.1 is true
+PASS 0.1 === 2 is false
+PASS 0.1 === 3 is false
+PASS 0.1 === 4 is false
+PASS 0.1 === 5 is false
+PASS 0.1 === 6 is false
+PASS 0.1 === 7 is false
+PASS 0.1 === -0 is false
+PASS 0.1 === "0" is false
+PASS 0.1 === "1" is false
+PASS 0.1 === "0.1" is false
+PASS 0.1 === "-0" is false
+PASS 0.1 === null is false
+PASS 0.1 === undefined is false
+PASS 0.1 === false is false
+PASS 0.1 === true is false
+PASS 0.1 === new String("0") is false
+PASS 0.1 === new Object is false
+PASS 2 === 0 is false
+PASS 2 === 1 is false
+PASS 2 === 0.1 is false
+PASS 2 === 2 is true
+PASS 2 === 3 is false
+PASS 2 === 4 is false
+PASS 2 === 5 is false
+PASS 2 === 6 is false
+PASS 2 === 7 is false
+PASS 2 === -0 is false
+PASS 2 === "0" is false
+PASS 2 === "1" is false
+PASS 2 === "0.1" is false
+PASS 2 === "-0" is false
+PASS 2 === null is false
+PASS 2 === undefined is false
+PASS 2 === false is false
+PASS 2 === true is false
+PASS 2 === new String("0") is false
+PASS 2 === new Object is false
+PASS 3 === 0 is false
+PASS 3 === 1 is false
+PASS 3 === 0.1 is false
+PASS 3 === 2 is false
+PASS 3 === 3 is true
+PASS 3 === 4 is false
+PASS 3 === 5 is false
+PASS 3 === 6 is false
+PASS 3 === 7 is false
+PASS 3 === -0 is false
+PASS 3 === "0" is false
+PASS 3 === "1" is false
+PASS 3 === "0.1" is false
+PASS 3 === "-0" is false
+PASS 3 === null is false
+PASS 3 === undefined is false
+PASS 3 === false is false
+PASS 3 === true is false
+PASS 3 === new String("0") is false
+PASS 3 === new Object is false
+PASS 4 === 0 is false
+PASS 4 === 1 is false
+PASS 4 === 0.1 is false
+PASS 4 === 2 is false
+PASS 4 === 3 is false
+PASS 4 === 4 is true
+PASS 4 === 5 is false
+PASS 4 === 6 is false
+PASS 4 === 7 is false
+PASS 4 === -0 is false
+PASS 4 === "0" is false
+PASS 4 === "1" is false
+PASS 4 === "0.1" is false
+PASS 4 === "-0" is false
+PASS 4 === null is false
+PASS 4 === undefined is false
+PASS 4 === false is false
+PASS 4 === true is false
+PASS 4 === new String("0") is false
+PASS 4 === new Object is false
+PASS 5 === 0 is false
+PASS 5 === 1 is false
+PASS 5 === 0.1 is false
+PASS 5 === 2 is false
+PASS 5 === 3 is false
+PASS 5 === 4 is false
+PASS 5 === 5 is true
+PASS 5 === 6 is false
+PASS 5 === 7 is false
+PASS 5 === -0 is false
+PASS 5 === "0" is false
+PASS 5 === "1" is false
+PASS 5 === "0.1" is false
+PASS 5 === "-0" is false
+PASS 5 === null is false
+PASS 5 === undefined is false
+PASS 5 === false is false
+PASS 5 === true is false
+PASS 5 === new String("0") is false
+PASS 5 === new Object is false
+PASS 6 === 0 is false
+PASS 6 === 1 is false
+PASS 6 === 0.1 is false
+PASS 6 === 2 is false
+PASS 6 === 3 is false
+PASS 6 === 4 is false
+PASS 6 === 5 is false
+PASS 6 === 6 is true
+PASS 6 === 7 is false
+PASS 6 === -0 is false
+PASS 6 === "0" is false
+PASS 6 === "1" is false
+PASS 6 === "0.1" is false
+PASS 6 === "-0" is false
+PASS 6 === null is false
+PASS 6 === undefined is false
+PASS 6 === false is false
+PASS 6 === true is false
+PASS 6 === new String("0") is false
+PASS 6 === new Object is false
+PASS 7 === 0 is false
+PASS 7 === 1 is false
+PASS 7 === 0.1 is false
+PASS 7 === 2 is false
+PASS 7 === 3 is false
+PASS 7 === 4 is false
+PASS 7 === 5 is false
+PASS 7 === 6 is false
+PASS 7 === 7 is true
+PASS 7 === -0 is false
+PASS 7 === "0" is false
+PASS 7 === "1" is false
+PASS 7 === "0.1" is false
+PASS 7 === "-0" is false
+PASS 7 === null is false
+PASS 7 === undefined is false
+PASS 7 === false is false
+PASS 7 === true is false
+PASS 7 === new String("0") is false
+PASS 7 === new Object is false
+PASS -0 === 0 is true
+PASS -0 === 1 is false
+PASS -0 === 0.1 is false
+PASS -0 === 2 is false
+PASS -0 === 3 is false
+PASS -0 === 4 is false
+PASS -0 === 5 is false
+PASS -0 === 6 is false
+PASS -0 === 7 is false
+PASS -0 === -0 is true
+PASS -0 === "0" is false
+PASS -0 === "1" is false
+PASS -0 === "0.1" is false
+PASS -0 === "-0" is false
+PASS -0 === null is false
+PASS -0 === undefined is false
+PASS -0 === false is false
+PASS -0 === true is false
+PASS -0 === new String("0") is false
+PASS -0 === new Object is false
+PASS "0" === 0 is false
+PASS "0" === 1 is false
+PASS "0" === 0.1 is false
+PASS "0" === 2 is false
+PASS "0" === 3 is false
+PASS "0" === 4 is false
+PASS "0" === 5 is false
+PASS "0" === 6 is false
+PASS "0" === 7 is false
+PASS "0" === -0 is false
+PASS "0" === "0" is true
+PASS "0" === "1" is false
+PASS "0" === "0.1" is false
+PASS "0" === "-0" is false
+PASS "0" === null is false
+PASS "0" === undefined is false
+PASS "0" === false is false
+PASS "0" === true is false
+PASS "0" === new String("0") is false
+PASS "0" === new Object is false
+PASS "1" === 0 is false
+PASS "1" === 1 is false
+PASS "1" === 0.1 is false
+PASS "1" === 2 is false
+PASS "1" === 3 is false
+PASS "1" === 4 is false
+PASS "1" === 5 is false
+PASS "1" === 6 is false
+PASS "1" === 7 is false
+PASS "1" === -0 is false
+PASS "1" === "0" is false
+PASS "1" === "1" is true
+PASS "1" === "0.1" is false
+PASS "1" === "-0" is false
+PASS "1" === null is false
+PASS "1" === undefined is false
+PASS "1" === false is false
+PASS "1" === true is false
+PASS "1" === new String("0") is false
+PASS "1" === new Object is false
+PASS "0.1" === 0 is false
+PASS "0.1" === 1 is false
+PASS "0.1" === 0.1 is false
+PASS "0.1" === 2 is false
+PASS "0.1" === 3 is false
+PASS "0.1" === 4 is false
+PASS "0.1" === 5 is false
+PASS "0.1" === 6 is false
+PASS "0.1" === 7 is false
+PASS "0.1" === -0 is false
+PASS "0.1" === "0" is false
+PASS "0.1" === "1" is false
+PASS "0.1" === "0.1" is true
+PASS "0.1" === "-0" is false
+PASS "0.1" === null is false
+PASS "0.1" === undefined is false
+PASS "0.1" === false is false
+PASS "0.1" === true is false
+PASS "0.1" === new String("0") is false
+PASS "0.1" === new Object is false
+PASS "-0" === 0 is false
+PASS "-0" === 1 is false
+PASS "-0" === 0.1 is false
+PASS "-0" === 2 is false
+PASS "-0" === 3 is false
+PASS "-0" === 4 is false
+PASS "-0" === 5 is false
+PASS "-0" === 6 is false
+PASS "-0" === 7 is false
+PASS "-0" === -0 is false
+PASS "-0" === "0" is false
+PASS "-0" === "1" is false
+PASS "-0" === "0.1" is false
+PASS "-0" === "-0" is true
+PASS "-0" === null is false
+PASS "-0" === undefined is false
+PASS "-0" === false is false
+PASS "-0" === true is false
+PASS "-0" === new String("0") is false
+PASS "-0" === new Object is false
+PASS null === 0 is false
+PASS null === 1 is false
+PASS null === 0.1 is false
+PASS null === 2 is false
+PASS null === 3 is false
+PASS null === 4 is false
+PASS null === 5 is false
+PASS null === 6 is false
+PASS null === 7 is false
+PASS null === -0 is false
+PASS null === "0" is false
+PASS null === "1" is false
+PASS null === "0.1" is false
+PASS null === "-0" is false
+PASS null === null is true
+PASS null === undefined is false
+PASS null === false is false
+PASS null === true is false
+PASS null === new String("0") is false
+PASS null === new Object is false
+PASS undefined === 0 is false
+PASS undefined === 1 is false
+PASS undefined === 0.1 is false
+PASS undefined === 2 is false
+PASS undefined === 3 is false
+PASS undefined === 4 is false
+PASS undefined === 5 is false
+PASS undefined === 6 is false
+PASS undefined === 7 is false
+PASS undefined === -0 is false
+PASS undefined === "0" is false
+PASS undefined === "1" is false
+PASS undefined === "0.1" is false
+PASS undefined === "-0" is false
+PASS undefined === null is false
+PASS undefined === undefined is true
+PASS undefined === false is false
+PASS undefined === true is false
+PASS undefined === new String("0") is false
+PASS undefined === new Object is false
+PASS false === 0 is false
+PASS false === 1 is false
+PASS false === 0.1 is false
+PASS false === 2 is false
+PASS false === 3 is false
+PASS false === 4 is false
+PASS false === 5 is false
+PASS false === 6 is false
+PASS false === 7 is false
+PASS false === -0 is false
+PASS false === "0" is false
+PASS false === "1" is false
+PASS false === "0.1" is false
+PASS false === "-0" is false
+PASS false === null is false
+PASS false === undefined is false
+PASS false === false is true
+PASS false === true is false
+PASS false === new String("0") is false
+PASS false === new Object is false
+PASS true === 0 is false
+PASS true === 1 is false
+PASS true === 0.1 is false
+PASS true === 2 is false
+PASS true === 3 is false
+PASS true === 4 is false
+PASS true === 5 is false
+PASS true === 6 is false
+PASS true === 7 is false
+PASS true === -0 is false
+PASS true === "0" is false
+PASS true === "1" is false
+PASS true === "0.1" is false
+PASS true === "-0" is false
+PASS true === null is false
+PASS true === undefined is false
+PASS true === false is false
+PASS true === true is true
+PASS true === new String("0") is false
+PASS true === new Object is false
+PASS new String("0") === 0 is false
+PASS new String("0") === 1 is false
+PASS new String("0") === 0.1 is false
+PASS new String("0") === 2 is false
+PASS new String("0") === 3 is false
+PASS new String("0") === 4 is false
+PASS new String("0") === 5 is false
+PASS new String("0") === 6 is false
+PASS new String("0") === 7 is false
+PASS new String("0") === -0 is false
+PASS new String("0") === "0" is false
+PASS new String("0") === "1" is false
+PASS new String("0") === "0.1" is false
+PASS new String("0") === "-0" is false
+PASS new String("0") === null is false
+PASS new String("0") === undefined is false
+PASS new String("0") === false is false
+PASS new String("0") === true is false
+PASS new String("0") === new String("0") is false
+PASS new String("0") === new Object is false
+PASS new Object === 0 is false
+PASS new Object === 1 is false
+PASS new Object === 0.1 is false
+PASS new Object === 2 is false
+PASS new Object === 3 is false
+PASS new Object === 4 is false
+PASS new Object === 5 is false
+PASS new Object === 6 is false
+PASS new Object === 7 is false
+PASS new Object === -0 is false
+PASS new Object === "0" is false
+PASS new Object === "1" is false
+PASS new Object === "0.1" is false
+PASS new Object === "-0" is false
+PASS new Object === null is false
+PASS new Object === undefined is false
+PASS new Object === false is false
+PASS new Object === true is false
+PASS new Object === new String("0") is false
+PASS new Object === new Object is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/equality.js b/test/webkit/equality.js
new file mode 100644 (file)
index 0000000..6bf253c
--- /dev/null
@@ -0,0 +1,77 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test for equality of many combinations types.'
+);
+
+var values = [ '0', '1', '0.1', '2', '3', '4', '5', '6', '7', '-0', '"0"', '"1"', '"0.1"', '"-0"', 'null', 'undefined', 'false', 'true', 'new String("0")', 'new Object' ];
+
+var exceptions = [
+    '"-0" == false',
+    '"0" == false',
+    '"0" == new String("0")',
+    '"1" == true',
+    '-0 == "-0"',
+    '-0 == "0"',
+    '-0 == false',
+    '-0 == new String("0")',
+    '0 == "-0"',
+    '0 == "0"',
+    '0 == -0',
+    '0 == false',
+    '0 == new String("0")',
+    '0 === -0',
+    '0.1 == "0.1"',
+    '1 == "1"',
+    '1 == true',
+    'new Object == new Object',
+    'new Object === new Object',
+    'new String("0") == false',
+    'new String("0") == new String("0")',
+    'new String("0") === new String("0")',
+    'null == undefined',
+];
+
+var exceptionMap = new Object;
+
+var i, j;
+
+for (i = 0; i < exceptions.length; ++i)
+    exceptionMap[exceptions[i]] = 1;
+
+for (i = 0; i < values.length; ++i) {
+    for (j = 0; j < values.length; ++j) {
+        var expression = values[i] + " == " + values[j];
+        var reversed = values[j] + " == " + values[i];
+        shouldBe(expression, ((i == j) ^ (exceptionMap[expression] || exceptionMap[reversed])) ? "true" : "false");
+    }
+}
+
+for (i = 0; i < values.length; ++i) {
+    for (j = 0; j < values.length; ++j) {
+        var expression = values[i] + " === " + values[j];
+        var reversed = values[j] + " === " + values[i];
+        shouldBe(expression, ((i == j) ^ (exceptionMap[expression] || exceptionMap[reversed])) ? "true" : "false");
+    }
+}
diff --git a/test/webkit/eval-and-with-expected.txt b/test/webkit/eval-and-with-expected.txt
new file mode 100644 (file)
index 0000000..c1783b0
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test case checks variable resolution in the presence of both eval and with.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS freeVarInsideEvalAndWith({}, "true")() is true
+PASS freeVarInsideEvalAndWith({}, "false")() is false
+PASS freeVarInsideEvalAndWith({}, "var x = 10; x")() == 10 is true
+PASS freeVarInsideEvalAndWith({}, "var x = 10; (function (){return x;})")()() == 10 is true
+PASS localVarInsideEvalAndWith({}, "true") is true
+PASS localVarInsideEvalAndWith({}, "false") is false
+PASS localVarInsideEvalAndWith({}, "var x = true; x") is true
+PASS localVarInsideEvalAndWith({}, "var x = 10; (function (){return x;})")() == 10 is true
+PASS localVarInsideEvalAndWith(y={x:false}, "var x = true; x && y.x") is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/eval-and-with.js b/test/webkit/eval-and-with.js
new file mode 100644 (file)
index 0000000..28c6598
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test case checks variable resolution in the presence of both eval and with."
+);
+
+// Direct non-strict eval inside a with.
+
+function freeVarInsideEvalAndWith(o, str)
+{
+    with (o)
+    {
+        return function () { return eval(str); }
+    }
+}
+
+shouldBeTrue('freeVarInsideEvalAndWith({}, "true")()')
+shouldBeFalse('freeVarInsideEvalAndWith({}, "false")()')
+shouldBeTrue('freeVarInsideEvalAndWith({}, "var x = 10; x")() == 10')
+shouldBeTrue('freeVarInsideEvalAndWith({}, "var x = 10; (function (){return x;})")()() == 10')
+
+function localVarInsideEvalAndWith(o, str)
+{
+    with (o)
+    {
+        return eval(str);
+    }
+}
+
+shouldBeTrue('localVarInsideEvalAndWith({}, "true")')
+shouldBeFalse('localVarInsideEvalAndWith({}, "false")')
+shouldBeTrue('localVarInsideEvalAndWith({}, "var x = true; x")')
+shouldBeTrue('localVarInsideEvalAndWith({}, "var x = 10; (function (){return x;})")() == 10')
+
+var y;
+shouldBeTrue('localVarInsideEvalAndWith(y={x:false}, "var x = true; x && y.x")')
diff --git a/test/webkit/eval-cache-crash-expected.txt b/test/webkit/eval-cache-crash-expected.txt
new file mode 100644 (file)
index 0000000..b0f794d
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to make sure the eval code cache doesn't crash or give wrong results in odd situations.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS first is 'first'
+PASS second is 'second'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/eval-cache-crash.js b/test/webkit/eval-cache-crash.js
new file mode 100644 (file)
index 0000000..1d3bd98
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Test to make sure the eval code cache doesn't crash or give wrong results in odd situations."
+);
+
+
+var str = "(function () { return a; })";
+var a = "first";
+var first = eval(str)();
+shouldBe("first", "'first'");
+
+with ({a : "second"}) {
+    var second = eval(str)();
+}
+
+shouldBe("second", "'second'");
diff --git a/test/webkit/eval-throw-return-expected.txt b/test/webkit/eval-throw-return-expected.txt
new file mode 100644 (file)
index 0000000..662531a
--- /dev/null
@@ -0,0 +1,48 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test verifies the result returned by the eval function when exceptions are thrown and caught whithin the contents of the evaluated string.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS eval("1;") is 1
+PASS eval("1; try { foo = [2,3,throwFunc(), 4]; } catch (e){}") is 1
+PASS eval("1; try { 2; throw \"\"; } catch (e){}") is 2
+PASS eval("1; try { 2; throwFunc(); } catch (e){}") is 2
+PASS eval("1; try { 2; throwFunc(); } catch (e){3;} finally {}") is 3
+PASS eval("1; try { 2; throwFunc(); } catch (e){3;} finally {4;}") is 4
+PASS eval("function blah() { 1; }\n blah();") is undefined
+PASS eval("var x = 1;") is undefined
+PASS eval("if (true) { 1; } else { 2; }") is 1
+PASS eval("if (false) { 1; } else { 2; }") is 2
+PASS eval("try{1; if (true) { 2; throw \"\"; } else { 2; }} catch(e){}") is 2
+PASS eval("1; var i = 0; do { ++i; 2; } while(i!=1);") is 2
+PASS eval("try{1; var i = 0; do { ++i; 2; throw \"\"; } while(i!=1);} catch(e){}") is 2
+PASS eval("1; try{2; throwOnReturn();} catch(e){}") is 2
+PASS eval("1; twoFunc();") is undefined
+PASS eval("1; with ( { a: 0 } ) { 2; }") is 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/eval-throw-return.js b/test/webkit/eval-throw-return.js
new file mode 100644 (file)
index 0000000..a5fd9f5
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('This test verifies the result returned by the eval function when exceptions are thrown and caught whithin the contents of the evaluated string.');
+
+function throwFunc() {
+  throw "";
+}
+
+function throwOnReturn(){
+  1;
+  return throwFunc();
+}
+
+function twoFunc() {
+  2;
+}
+
+shouldBe('eval("1;")', "1");
+shouldBe('eval("1; try { foo = [2,3,throwFunc(), 4]; } catch (e){}")', "1");
+shouldBe('eval("1; try { 2; throw \\"\\"; } catch (e){}")', "2");
+shouldBe('eval("1; try { 2; throwFunc(); } catch (e){}")', "2");
+shouldBe('eval("1; try { 2; throwFunc(); } catch (e){3;} finally {}")', "3");
+shouldBe('eval("1; try { 2; throwFunc(); } catch (e){3;} finally {4;}")', "4");
+shouldBe('eval("function blah() { 1; }\\n blah();")', "undefined");
+shouldBe('eval("var x = 1;")', "undefined");
+shouldBe('eval("if (true) { 1; } else { 2; }")', "1");
+shouldBe('eval("if (false) { 1; } else { 2; }")', "2");
+shouldBe('eval("try{1; if (true) { 2; throw \\"\\"; } else { 2; }} catch(e){}")', "2");
+shouldBe('eval("1; var i = 0; do { ++i; 2; } while(i!=1);")', "2");
+shouldBe('eval("try{1; var i = 0; do { ++i; 2; throw \\"\\"; } while(i!=1);} catch(e){}")', "2");
+shouldBe('eval("1; try{2; throwOnReturn();} catch(e){}")', "2");
+shouldBe('eval("1; twoFunc();")', "undefined");
+shouldBe('eval("1; with ( { a: 0 } ) { 2; }")', "2");
diff --git a/test/webkit/eval-var-decl-expected.txt b/test/webkit/eval-var-decl-expected.txt
new file mode 100644 (file)
index 0000000..4488a7f
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test case checks whether variables cause properties to be defined even before reaching the declaration statement in various cases.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS this.hasOwnProperty("foo") is true
+PASS this.hasOwnProperty("bar") is true
+PASS firstEvalResult is true
+PASS secondEvalResult is false
+PASS thirdEvalResult is true
+PASS testEvalInCatch() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/eval-var-decl.js b/test/webkit/eval-var-decl.js
new file mode 100644 (file)
index 0000000..05aead1
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test case checks whether variables cause properties to be defined even before reaching the declaration statement in various cases."
+);
+
+shouldBeTrue('this.hasOwnProperty("foo")');
+var foo = 3;
+
+delete bar;
+shouldBeTrue('this.hasOwnProperty("bar")');
+var bar = 3;
+
+var firstEvalResult = eval('var result = this.hasOwnProperty("y"); var y = 3; result');
+shouldBeTrue("firstEvalResult");
+
+var secondEvalResult = eval('delete x; var result = this.hasOwnProperty("x"); var x = 3; result');
+shouldBeFalse("secondEvalResult");
+
+var thirdEvalResult = false;
+try {
+    thirdEvalResult = (function(){ var x=false; try { throw ""; } catch (e) { eval("var x = true;"); } return x; })();
+} catch (e) {
+    thirdEvalResult = "Threw exception!";
+}
+shouldBeTrue("thirdEvalResult");
+
+// Check that the correct this value is passed to a function called having been caught from a throw, where the catch block contains an eval (bug#).
+function checkThis()
+{
+    "use strict";
+    return this === undefined;
+}
+function testEvalInCatch()
+{
+    try {
+        throw checkThis;
+    } catch(e) {
+        eval('');
+        return e();
+    }
+    return false;
+}
+shouldBeTrue("testEvalInCatch()");
diff --git a/test/webkit/exception-for-nonobject-expected.txt b/test/webkit/exception-for-nonobject-expected.txt
new file mode 100644 (file)
index 0000000..86068b1
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for correct handling of exceptions from instanceof and 'new' expressions
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS new {}.undefined threw exception TypeError: undefined is not a function.
+PASS 1 instanceof {}.undefined threw exception TypeError: Expecting a function in instanceof check, but got 1.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/exception-for-nonobject.js b/test/webkit/exception-for-nonobject.js
new file mode 100644 (file)
index 0000000..d39c3e0
--- /dev/null
@@ -0,0 +1,27 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test for correct handling of exceptions from instanceof and 'new' expressions");
+
+shouldThrow("new {}.undefined");
+shouldThrow("1 instanceof {}.undefined");
diff --git a/test/webkit/exception-propagate-from-dfg-to-llint-expected.txt b/test/webkit/exception-propagate-from-dfg-to-llint-expected.txt
new file mode 100644 (file)
index 0000000..1be9838
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Ensures that we pass exceptions to the correct codeblock when throwing from the DFG to the LLInt.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Caught exception in correct codeblock
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/exception-propagate-from-dfg-to-llint.js b/test/webkit/exception-propagate-from-dfg-to-llint.js
new file mode 100644 (file)
index 0000000..51075fd
--- /dev/null
@@ -0,0 +1,210 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Ensures that we pass exceptions to the correct codeblock when throwing from the DFG to the LLInt.");
+var o = {
+    toString: function() { if (shouldThrow) throw {}; return ""; }
+};
+
+var shouldThrow = false;
+function h(o) {
+    return String(o);
+}
+
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+try { shouldThrow = !shouldThrow; h(o); } catch (e) {}
+
+
+function g() {
+    with({})
+        h(o);
+}
+
+function f1() {
+    try {
+        g();
+    } catch (e) {
+        testFailed("Caught exception in wrong codeblock");
+    }
+}
+
+function f2() {
+    try {
+        g();
+    } catch (e) {
+        testPassed("Caught exception in correct codeblock");
+    }
+}
+
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+f1();
+shouldThrow = true;
+f2();
+var successfullyParsed = true;
diff --git a/test/webkit/exception-try-finally-scope-error-expected.txt b/test/webkit/exception-try-finally-scope-error-expected.txt
new file mode 100644 (file)
index 0000000..7febcfa
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test makes sure stack unwinding works correctly in combination with dynamically added scopes
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is "inner scope"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/exception-try-finally-scope-error.js b/test/webkit/exception-try-finally-scope-error.js
new file mode 100644 (file)
index 0000000..cfb2b92
--- /dev/null
@@ -0,0 +1,59 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('This test makes sure stack unwinding works correctly in combination with dynamically added scopes');
+
+function gc()
+{
+    if (this.GCController)
+        GCController.collect();
+    else
+        for (var i = 0; i < 10000; ++i) // Allocate a sufficient number of objects to force a GC.
+            ({});
+}
+
+var result;
+function runTest() {
+    var test = "outer scope";
+    with({test:"inner scope"})
+       (function () { try { throw ""; } finally { result = test; shouldBe("result", '"inner scope"'); return;}})()
+}
+runTest();
+
+try{
+(function() {
+    try {
+        throw "";
+    } catch(y) {
+        throw (function(){});
+    } finally {
+    }
+})()
+}catch(r){
+}
+
+// Just clobber any temporaries
+a=({});
+a*=a*a*a;
+
+gc();
diff --git a/test/webkit/exception-with-handler-inside-eval-with-dynamic-scope-expected.txt b/test/webkit/exception-with-handler-inside-eval-with-dynamic-scope-expected.txt
new file mode 100644 (file)
index 0000000..d5b21a3
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test makes sure stack unwinding works correctly when it occurs inside an eval contained in a dynamic scope.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is "inner scope"
+PASS result is "inner scope"
+PASS result is "innermost scope"
+PASS result is "innermost scope"
+PASS result is "inner scope"
+PASS result is "inner scope"
+PASS result is "inner scope"
+PASS result is "innermost scope"
+PASS result is "innermost scope"
+PASS result is "outer scope"
+PASS result is "outer scope"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/exception-with-handler-inside-eval-with-dynamic-scope.js b/test/webkit/exception-with-handler-inside-eval-with-dynamic-scope.js
new file mode 100644 (file)
index 0000000..68d4015
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('This test makes sure stack unwinding works correctly when it occurs inside an eval contained in a dynamic scope.');
+var result;
+function runTest() {
+    var test = "outer scope";
+    with({test:"inner scope"}) {
+        eval("try { throw ''; } catch (e) { result = test; shouldBe('result', '\"inner scope\"'); }");
+        result = null;
+        eval("try { with({test:'innermost scope'}) throw ''; } catch (e) { result = test; shouldBe('result', '\"inner scope\"'); }");
+        result = null;
+        eval("with ({test:'innermost scope'}) try { throw ''; } catch (e) { result = test; shouldBe('result', '\"innermost scope\"'); }");
+        result = null;
+        with ({test:'innermost scope'}) eval("try { throw ''; } catch (e) { result = test; shouldBe('result', '\"innermost scope\"'); }");
+        result = null;
+        try {
+            eval("try { throw ''; } finally { result = test; shouldBe('result', '\"inner scope\"'); result = null; undeclared; }");
+        } catch(e) {
+            result = test;
+            shouldBe('result', '"inner scope"');
+            result = null;
+            eval("try { with({test:'innermost scope'}) throw ''; } catch (e) { result = test; shouldBe('result', '\"inner scope\"'); }");
+            result = null;
+            eval("with ({test:'innermost scope'}) try { throw ''; } catch (e) { result = test; shouldBe('result', '\"innermost scope\"'); }");
+            result = null;
+            with ({test:'innermost scope'}) eval("try { throw ''; } catch (e) { result = test; shouldBe('result', '\"innermost scope\"'); }");
+        }
+    }
+    result = test;
+    eval("try { throw ''; } catch (e) { result = test; shouldBe('result', '\"outer scope\"'); }");
+    eval("result = test");
+    eval("try { throw ''; } catch (e) { result = test; shouldBe('result', '\"outer scope\"'); }");
+}
+runTest();
diff --git a/test/webkit/finally-codegen-failure-expected.txt b/test/webkit/finally-codegen-failure-expected.txt
new file mode 100644 (file)
index 0000000..0743392
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test that finally behaviour is correct.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS f() is true
+PASS (function () { var a = true; try { return a; } finally { a = false; }})() is true
+PASS (function () { var a = 'PASS'; try { throw a; } finally { a = 'FAIL'; }})() threw exception PASS.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/finally-codegen-failure.js b/test/webkit/finally-codegen-failure.js
new file mode 100644 (file)
index 0000000..0378656
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test that finally behaviour is correct.");
+
+a = {
+    f: function() { return true; }
+};
+
+a.f.toString = function() { return "Fail"; };
+
+function f() {
+    try {
+        a.f();
+        a.f();
+        return a.f();
+    } finally {
+        a.f();
+    }
+}
+shouldBeTrue("f()")
+
+shouldBeTrue("(function () { var a = true; try { return a; } finally { a = false; }})()");
+shouldThrow("(function () { var a = 'PASS'; try { throw a; } finally { a = 'FAIL'; }})()");
diff --git a/test/webkit/flatten-dictionary-structure-from-which-all-properties-were-deleted-expected.txt b/test/webkit/flatten-dictionary-structure-from-which-all-properties-were-deleted-expected.txt
new file mode 100644 (file)
index 0000000..8aaa345
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that deleting all properties from an object and then flattening it doesn't cause inconsistencies.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS p.f is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/flatten-dictionary-structure-from-which-all-properties-were-deleted.js b/test/webkit/flatten-dictionary-structure-from-which-all-properties-were-deleted.js
new file mode 100644 (file)
index 0000000..ccaccad
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that deleting all properties from an object and then flattening it doesn't cause inconsistencies."
+);
+
+var o = {};
+
+for (var i = 0; i < 1000; ++i)
+    o["a" + i] = i;
+
+for (var i = 0; i < 1000; ++i)
+    delete o["a" + i];
+
+var p = {};
+p.__proto__ = o;
+
+var q = {f:42};
+o.__proto__ = q;
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("p.f", "42");
diff --git a/test/webkit/for-in-avoid-duplicates-expected.txt b/test/webkit/for-in-avoid-duplicates-expected.txt
new file mode 100644 (file)
index 0000000..a6c1b5e
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that for/in statements don't report properties that are in both an object and its prototype more than once.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS i is 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/for-in-avoid-duplicates.js b/test/webkit/for-in-avoid-duplicates.js
new file mode 100644 (file)
index 0000000..a961f91
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that for/in statements don't report properties that are in both an object and its prototype more than once."
+);
+
+
+function constr() {
+    this.xxx = "foo";
+    this.yyy = "bar";
+}
+
+constr.prototype = { xxx: "baz", yyy: "quux" };
+
+var obj = new constr();
+
+var i = 0;
+for (var prop in obj) {
+    ++i;
+}
+
+shouldBe("i", "2");
diff --git a/test/webkit/for-in-cached-expected.txt b/test/webkit/for-in-cached-expected.txt
new file mode 100644 (file)
index 0000000..0d0c337
--- /dev/null
@@ -0,0 +1,42 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that for/in statements behave correctly when cached.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS forIn1() is ['x', 'y']
+PASS forIn2() is ['x']
+PASS forIn3({ __proto__: { y1: 2 } }) is ['x', 'y1']
+PASS forIn3({ y2 : 2, __proto__: null }) is ['x', 'y2']
+PASS forIn3({ __proto__: { __proto__: { y3 : 2 } } }) is ['x', 'y3']
+PASS forIn4(objectWithArrayAsProto) is []
+PASS forIn4(objectWithArrayAsProto) is ['0']
+PASS forIn5({get foo() { return 'called getter'} }) is ['foo', 'called getter']
+PASS forIn5({set foo() { } }) is ['foo', undefined]
+PASS forIn5({get foo() { return 'called getter'}, set foo() { }}) is ['foo', 'called getter']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/for-in-cached.js b/test/webkit/for-in-cached.js
new file mode 100644 (file)
index 0000000..1842d61
--- /dev/null
@@ -0,0 +1,97 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that for/in statements behave correctly when cached."
+);
+
+function forIn1() {
+    var result = [];
+    var o = { x: 1 };
+    for (var p in o)
+        result.push(p);
+    return result;
+}
+forIn1();
+Object.prototype.y = 2;
+shouldBe("forIn1()", "['x', 'y']");
+delete Object.prototype.y;
+
+function forIn2() {
+    var result = [];
+    var o = { x: 1, __proto__: null };
+    for (var p in o)
+        result.push(p);
+    return result;
+}
+forIn2();
+shouldBe("forIn2()", "['x']");
+
+function forIn3(proto) {
+    var result = [];
+    var o = { x: 1, __proto__: proto };
+    for (var p in o)
+        result.push(p);
+    return result;
+}
+forIn3({ __proto__: { y1: 2 } });
+forIn3({ __proto__: { y1: 2 } });
+shouldBe("forIn3({ __proto__: { y1: 2 } })", "['x', 'y1']");
+
+forIn3({ y2 : 2, __proto__: null });
+forIn3({ y2 : 2, __proto__: null });
+shouldBe("forIn3({ y2 : 2, __proto__: null })", "['x', 'y2']");
+
+forIn3({ __proto__: { __proto__: { y3 : 2 } } });
+forIn3({ __proto__: { __proto__: { y3 : 2 } } });
+shouldBe("forIn3({ __proto__: { __proto__: { y3 : 2 } } })", "['x', 'y3']");
+
+function forIn4(o) {
+    var result = [];
+    for (var p in o)
+        result.push(p);
+    return result;
+}
+var objectWithArrayAsProto = {};
+objectWithArrayAsProto.__proto__ = [];
+shouldBe("forIn4(objectWithArrayAsProto)", "[]");
+objectWithArrayAsProto.__proto__[0]=1;
+shouldBe("forIn4(objectWithArrayAsProto)", "['0']");
+
+function forIn5(o) {
+    for (var i in o)
+        return [i, o[i]];
+}
+
+shouldBe("forIn5({get foo() { return 'called getter'} })", "['foo', 'called getter']");
+shouldBe("forIn5({set foo() { } })", "['foo', undefined]");
+shouldBe("forIn5({get foo() { return 'called getter'}, set foo() { }})", "['foo', 'called getter']");
+
+function cacheClearing() {
+    for(var j=0; j < 10; j++){
+        var o = {a:1,b:2,c:3,d:4,e:5}
+        try {for (i in o) { delete o.a; o = null; throw "" };}finally{continue}
+    }
+}
+
+cacheClearing()
diff --git a/test/webkit/for-in-exeception-expected.txt b/test/webkit/for-in-exeception-expected.txt
new file mode 100644 (file)
index 0000000..75e997b
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for (foo in somethingWhichThrows) to catch ASSERT
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test(throwUndefinedException) is undefined.
+PASS test(throwNullException) is undefined.
+PASS test(throwStringException) threw exception PASSED.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/for-in-exeception.js b/test/webkit/for-in-exeception.js
new file mode 100644 (file)
index 0000000..f510185
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Test for (foo in somethingWhichThrows) to catch ASSERT');
+
+function throwNullException() {
+  throw null;
+}
+
+function throwUndefinedException() {
+  throw undefined;
+}
+
+function throwStringException() {
+  throw "PASSED"
+}
+
+function test(func) {
+  for (var foo in func()) {
+    testFailed("Shoud not be reached");
+  }
+}
+
+shouldBeUndefined("test(throwUndefinedException)");
+shouldBeUndefined("test(throwNullException)");
+shouldThrow("test(throwStringException)");
diff --git a/test/webkit/for-in-to-text-expected.txt b/test/webkit/for-in-to-text-expected.txt
new file mode 100644 (file)
index 0000000..2e11c6e
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that JavaScriptCore ForInNodes are converted correctly to text.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test.toString().match('for *[(]j *in *index[)]') != null is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/for-in-to-text.js b/test/webkit/for-in-to-text.js
new file mode 100644 (file)
index 0000000..34f79d9
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that JavaScriptCore ForInNodes are converted correctly to text."
+);
+
+function test() {
+    for (j in index) {
+        testProperty(index[j]);
+    }
+}
+
+shouldBeTrue("test.toString().match('for *[(]j *in *index[)]') != null");
diff --git a/test/webkit/for-in-var-scope-expected.txt b/test/webkit/for-in-var-scope-expected.txt
new file mode 100644 (file)
index 0000000..1f66d8a
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that for/in statements properly scope a variable that's declared in one. In previous versions of JavaScriptCore there were two bugs that caused problems. First, the loop variable declaration would not be processed. Second, the code to set the loop variable would incorrectly walk the scope chain even after setting the loop variable.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS i is 'start i'
+PASS j is 'propName'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/for-in-var-scope.js b/test/webkit/for-in-var-scope.js
new file mode 100644 (file)
index 0000000..7ac8e04
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that for/in statements properly scope a variable that's declared in one. "
++ "In previous versions of JavaScriptCore there were two bugs that caused problems. "
++ "First, the loop variable declaration would not be processed. "
++ "Second, the code to set the loop variable would incorrectly walk the scope chain even after setting the loop variable."
+);
+
+var i = "start i";
+var j = "start j";
+
+function func() {
+    var object = new Object;
+    object.propName = "propValue";
+    for (var i in object) { j = i; }
+}
+func();
+
+shouldBe("i", "'start i'");
+shouldBe("j", "'propName'");
diff --git a/test/webkit/function-apply-aliased-expected.txt b/test/webkit/function-apply-aliased-expected.txt
new file mode 100644 (file)
index 0000000..b6c6c86
--- /dev/null
@@ -0,0 +1,54 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that we can correctly call Function.prototype.apply
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS myObject.apply() is [myObject, "myObject.apply"]
+PASS forwarder(myObject) is [myObject, "myObject.apply"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS forwarder(myFunction, null, ['arg1']) is [this, "myFunction", "arg1"]
+PASS myFunction.apply(myObject, ['arg1']) is [myObject, "myFunction", "arg1"]
+PASS myFunction.apply(myObject, arg1Array) is [myObject, "myFunction", "arg1"]
+PASS forwarder(myFunction, myObject, arg1Array) is [myObject, "myFunction", "arg1"]
+PASS myFunction.apply() is [this, "myFunction", undefined]
+PASS myFunction.apply(null) is [this, "myFunction", undefined]
+PASS myFunction.apply(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedApply(myObject, ['arg1']) is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedApply() is [this, "myFunction", undefined]
+PASS myFunction.aliasedApply(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedApply(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithApply.apply(myObject, ['arg1']) is [myFunctionWithApply, "myFunctionWithApply.apply", myObject]
+PASS myFunctionWithApply.aliasedApply(myObject, ['arg1']) is [myObject, "myFunctionWithApply", "arg1"]
+PASS myFunctionWithApply.apply(myObject, arg1Array) is [myFunctionWithApply, "myFunctionWithApply.apply", myObject]
+PASS forwarder(myFunctionWithApply, myObject, arg1Array) is [myFunctionWithApply, "myFunctionWithApply.apply", myObject]
+PASS myFunctionWithApply.aliasedApply(myObject, arg1Array) is [myObject, "myFunctionWithApply", "arg1"]
+PASS myFunction.apply(null, new Array(5000000)) threw exception RangeError: Maximum call stack size exceeded.
+PASS myFunction.apply(null, new Array(1 << 30)) threw exception RangeError: Maximum call stack size exceeded.
+PASS recurseArguments.apply(null, new Array(50000)) threw exception RangeError: Maximum call stack size exceeded.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/function-apply-aliased.js b/test/webkit/function-apply-aliased.js
new file mode 100644 (file)
index 0000000..cda3b1b
--- /dev/null
@@ -0,0 +1,84 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that we can correctly call Function.prototype.apply"
+);
+
+var myObject = { apply: function() { return [myObject, "myObject.apply"] } };
+var myFunction = function (arg1) {
+    return [this, "myFunction", arg1];
+};
+var myFunctionWithApply = function (arg1) {
+    return [this, "myFunctionWithApply", arg1];
+};
+
+function forwarder(f, thisValue, args) {
+    function g() {
+        return f.apply(thisValue, arguments);
+    }
+    return g.apply(null, args);
+}
+function recurseArguments() {
+    recurseArguments.apply(null, arguments);
+}
+
+myFunctionWithApply.apply = function (arg1) { return [this, "myFunctionWithApply.apply", arg1] };
+Function.prototype.aliasedApply = Function.prototype.apply;
+var arg1Array = ['arg1'];
+
+shouldBe("myObject.apply()", '[myObject, "myObject.apply"]');
+shouldBe("forwarder(myObject)", '[myObject, "myObject.apply"]');
+shouldBe("myFunction('arg1')", '[this, "myFunction", "arg1"]');
+shouldBe("forwarder(myFunction, null, ['arg1'])", '[this, "myFunction", "arg1"]');
+shouldBe("myFunction.apply(myObject, ['arg1'])", '[myObject, "myFunction", "arg1"]');
+shouldBe("myFunction.apply(myObject, arg1Array)", '[myObject, "myFunction", "arg1"]');
+shouldBe("forwarder(myFunction, myObject, arg1Array)", '[myObject, "myFunction", "arg1"]');
+shouldBe("myFunction.apply()", '[this, "myFunction", undefined]');
+shouldBe("myFunction.apply(null)", '[this, "myFunction", undefined]');
+shouldBe("myFunction.apply(undefined)", '[this, "myFunction", undefined]');
+shouldBe("myFunction.aliasedApply(myObject, ['arg1'])", '[myObject, "myFunction", "arg1"]');
+shouldBe("myFunction.aliasedApply()", '[this, "myFunction", undefined]');
+shouldBe("myFunction.aliasedApply(null)", '[this, "myFunction", undefined]');
+shouldBe("myFunction.aliasedApply(undefined)", '[this, "myFunction", undefined]');
+shouldBe("myFunctionWithApply.apply(myObject, ['arg1'])", '[myFunctionWithApply, "myFunctionWithApply.apply", myObject]');
+shouldBe("myFunctionWithApply.aliasedApply(myObject, ['arg1'])", '[myObject, "myFunctionWithApply", "arg1"]');
+shouldBe("myFunctionWithApply.apply(myObject, arg1Array)", '[myFunctionWithApply, "myFunctionWithApply.apply", myObject]');
+shouldBe("forwarder(myFunctionWithApply, myObject, arg1Array)", '[myFunctionWithApply, "myFunctionWithApply.apply", myObject]');
+shouldBe("myFunctionWithApply.aliasedApply(myObject, arg1Array)", '[myObject, "myFunctionWithApply", "arg1"]');
+
+function stackOverflowTest() {
+    try {
+        var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;
+        stackOverflowTest();
+    } catch(e) {
+        // Blow the stack with a sparse array
+        shouldThrow("myFunction.apply(null, new Array(5000000))");
+        // Blow the stack with a sparse array that is sufficiently large to cause int overflow
+        shouldThrow("myFunction.apply(null, new Array(1 << 30))");
+    }
+}
+stackOverflowTest();
+
+// Blow the stack recursing with arguments
+shouldThrow("recurseArguments.apply(null, new Array(50000))");
diff --git a/test/webkit/function-call-aliased-expected.txt b/test/webkit/function-call-aliased-expected.txt
new file mode 100644 (file)
index 0000000..21071dc
--- /dev/null
@@ -0,0 +1,44 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that we can correctly call Function.prototype.call
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS myObject.call() is [myObject, "myObject.call"]
+PASS myFunction('arg1') is [this, "myFunction", "arg1"]
+PASS myFunction.call(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.call() is [this, "myFunction", undefined]
+PASS myFunction.call(null) is [this, "myFunction", undefined]
+PASS myFunction.call(undefined) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(myObject, 'arg1') is [myObject, "myFunction", "arg1"]
+PASS myFunction.aliasedCall() is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(null) is [this, "myFunction", undefined]
+PASS myFunction.aliasedCall(undefined) is [this, "myFunction", undefined]
+PASS myFunctionWithCall.call(myObject, 'arg1') is [myFunctionWithCall, "myFunctionWithCall.call", myObject]
+PASS myFunctionWithCall.aliasedCall(myObject, 'arg1') is [myObject, "myFunctionWithCall", "arg1"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/function-call-aliased.js b/test/webkit/function-call-aliased.js
new file mode 100644 (file)
index 0000000..e8e167f
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that we can correctly call Function.prototype.call"
+);
+
+var myObject = { call: function() { return [myObject, "myObject.call"] } };
+var myFunction = function (arg1) { return [this, "myFunction", arg1] };
+var myFunctionWithCall = function (arg1) { return [this, "myFunctionWithCall", arg1] };
+myFunctionWithCall.call = function (arg1) { return [this, "myFunctionWithCall.call", arg1] };
+Function.prototype.aliasedCall = Function.prototype.call;
+
+shouldBe("myObject.call()", '[myObject, "myObject.call"]');
+shouldBe("myFunction('arg1')", '[this, "myFunction", "arg1"]');
+shouldBe("myFunction.call(myObject, 'arg1')", '[myObject, "myFunction", "arg1"]');
+shouldBe("myFunction.call()", '[this, "myFunction", undefined]');
+shouldBe("myFunction.call(null)", '[this, "myFunction", undefined]');
+shouldBe("myFunction.call(undefined)", '[this, "myFunction", undefined]');
+shouldBe("myFunction.aliasedCall(myObject, 'arg1')", '[myObject, "myFunction", "arg1"]');
+shouldBe("myFunction.aliasedCall()", '[this, "myFunction", undefined]');
+shouldBe("myFunction.aliasedCall(null)", '[this, "myFunction", undefined]');
+shouldBe("myFunction.aliasedCall(undefined)", '[this, "myFunction", undefined]');
+shouldBe("myFunctionWithCall.call(myObject, 'arg1')", '[myFunctionWithCall, "myFunctionWithCall.call", myObject]');
+shouldBe("myFunctionWithCall.aliasedCall(myObject, 'arg1')", '[myObject, "myFunctionWithCall", "arg1"]');
diff --git a/test/webkit/function-call-register-allocation-expected.txt b/test/webkit/function-call-register-allocation-expected.txt
new file mode 100644 (file)
index 0000000..c1903fc
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for a specific regression that caused function calls to allocate too many temporary registers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS: Recursion did not run out of stack space.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/function-call-register-allocation.js b/test/webkit/function-call-register-allocation.js
new file mode 100644 (file)
index 0000000..8873bde
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks for a specific regression that caused function calls to allocate too many temporary registers."
+);
+
+var message = "PASS: Recursion did not run out of stack space."
+try {
+    // Call a function recursively.
+    (function f(g, x) {
+        if (x > 3000)
+            return;
+
+        // Do lots of function calls -- when the bug was present, each
+        // of these calls would allocate a new temporary register. We can
+        // detect profligate register allocation because it will substantially
+        // curtail our recursion limit.
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+        g(); g(); g(); g(); g(); g(); g(); g(); g(); g();
+
+        f(g, ++x);
+    })(function() {}, 0);
+} catch(e) {
+    message = "FAIL: Recursion threw an exception: " + e;
+}
+
+debug(message);
diff --git a/test/webkit/function-constructor-newline-after-brace-expected.txt b/test/webkit/function-constructor-newline-after-brace-expected.txt
new file mode 100644 (file)
index 0000000..56a7f81
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that the Function constructor places a newline after the opening brace, for compatibility reasons. It passes if there are no syntax error exceptions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/function-constructor-newline-after-brace.js b/test/webkit/function-constructor-newline-after-brace.js
new file mode 100644 (file)
index 0000000..eeb8a4f
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that the Function constructor places a newline after the opening brace, for compatibility reasons. It passes if there are no syntax error exceptions."
+);
+
+function addToFunction(oldFunction, name)
+{
+    var tempString = "";
+    if (oldFunction != null)  {
+        tempString = oldFunction.toString();
+        var index = tempString.indexOf("{") + 2;
+        tempString = tempString.substr(index, tempString.length - index - 2);
+    }
+    return new Function(name + '_obj.initialize();' + tempString);
+}
+
+var f1 = addToFunction(null, "f1");
+addToFunction(f1, "f2");
+
+function addToFunctionWithArgument(oldFunction, name)
+{
+    var tempString = "";
+    if (oldFunction != null)  {
+        tempString = oldFunction.toString();
+        var index = tempString.indexOf("{") + 2;
+        tempString = tempString.substr(index, tempString.length - index - 2);
+    }
+    return new Function("arg", name + '_obj.initialize();' + tempString);
+}
+
+var g1 = addToFunctionWithArgument(null, "g1");
+addToFunctionWithArgument(g1, "g2");
diff --git a/test/webkit/function-constructor-single-line-comment-expected.txt b/test/webkit/function-constructor-single-line-comment-expected.txt
new file mode 100644 (file)
index 0000000..8735b1d
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that the Function constructor works correctly in the presence of single line comments.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (new Function('return true//'))() is true
+PASS (new Function('return true;//'))() is true
+PASS (new Function('a', 'return a//'))(true) is true
+PASS (new Function('a', 'return a;//'))(true) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/function-constructor-single-line-comment.js b/test/webkit/function-constructor-single-line-comment.js
new file mode 100644 (file)
index 0000000..4586ee6
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that the Function constructor works correctly in the presence of single line comments."
+);
+
+shouldBeTrue("(new Function('return true//'))()");
+shouldBeTrue("(new Function('return true;//'))()");
+shouldBeTrue("(new Function('a', 'return a//'))(true)");
+shouldBeTrue("(new Function('a', 'return a;//'))(true)");
diff --git a/test/webkit/function-declaration-expected.txt b/test/webkit/function-declaration-expected.txt
new file mode 100644 (file)
index 0000000..b59002e
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test ensures we correctly parse (or not) various function declarations
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS eval('function f(){return true;}') is undefined.
+PASS eval('function f(){return true;};f')() is true
+PASS eval('function(){return false;}')() threw exception SyntaxError: Unexpected token (.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/function-declaration-statement-expected.txt b/test/webkit/function-declaration-statement-expected.txt
new file mode 100644 (file)
index 0000000..1bbc7f5
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that function declarations are treated as statements.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS ifTest() is true
+PASS ifElseTest() is true
+PASS doWhileTest() is true
+PASS whileTest() is true
+PASS forTest() is true
+PASS forVarTest() is true
+PASS forInTest() is true
+PASS forInVarTest() is true
+PASS forInVarInitTest() is true
+PASS withTest() is true
+PASS labelTest() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/function-declaration-statement.js b/test/webkit/function-declaration-statement.js
new file mode 100644 (file)
index 0000000..e2ee343
--- /dev/null
@@ -0,0 +1,183 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that function declarations are treated as statements."
+);
+
+function f()
+{
+    return false;
+}
+
+function ifTest()
+{
+    if (true)
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("ifTest()");
+
+function ifElseTest()
+{
+    if (false)
+        return false;
+    else
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("ifElseTest()");
+
+function doWhileTest()
+{
+    var i = 0;
+    do
+        function f()
+        {
+            return true;
+        }
+    while (i++ < 10)
+
+    return f();
+}
+
+shouldBeTrue("doWhileTest()");
+
+function whileTest()
+{
+    var i = 0;
+    while (i++ < 10)
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("whileTest()");
+
+function forTest()
+{
+    var i;
+    for (i = 0; i < 10; ++i)
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("forTest()");
+
+function forVarTest()
+{
+    for (var i = 0; i < 10; ++i)
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("forVarTest()");
+
+function forInTest()
+{
+    var a;
+    for (a in { field: false })
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("forInTest()");
+
+function forInVarTest()
+{
+    var a;
+    for (var a in { field: false })
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("forInVarTest()");
+
+function forInVarInitTest()
+{
+    var a;
+    for (var a = false in { field: false })
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("forInVarInitTest()");
+
+function withTest()
+{
+    with ({ })
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("withTest()");
+
+function labelTest()
+{
+    label:
+        function f()
+        {
+            return true;
+        }
+
+    return f();
+}
+
+shouldBeTrue("labelTest()");
diff --git a/test/webkit/function-declaration.js b/test/webkit/function-declaration.js
new file mode 100644 (file)
index 0000000..fbc4efb
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test ensures we correctly parse (or not) various function declarations"
+);
+
+shouldBeUndefined("eval('function f(){return true;}')");
+shouldBeTrue("eval('function f(){return true;};f')()");
+shouldThrow("eval('function(){return false;}')()");
diff --git a/test/webkit/function-declarations-in-switch-statement-expected.txt b/test/webkit/function-declarations-in-switch-statement-expected.txt
new file mode 100644 (file)
index 0000000..602b8b9
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+WARN: shouldBe() expects string arguments
+PASS 20 is 20
+WARN: shouldBe() expects string arguments
+PASS 20 is 20
+WARN: shouldBe() expects string arguments
+PASS 20 is 20
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/function-declarations-in-switch-statement.js b/test/webkit/function-declarations-in-switch-statement.js
new file mode 100644 (file)
index 0000000..7e7a505
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+function t(n) {
+    switch (n) {
+        case 1:
+            function f() {
+                return 10;
+            }
+            break;
+        case 2:
+            function f() {
+                return 20;
+            }
+            break;
+    }
+
+    try {
+      return f();
+    } catch (e) {
+      return -1;
+    }
+}
+
+shouldBe(t(1), '20');
+shouldBe(t(2), '20');
+shouldBe(t(3), '20');
diff --git a/test/webkit/function-dot-apply-replace-base-expected.txt b/test/webkit/function-dot-apply-replace-base-expected.txt
new file mode 100644 (file)
index 0000000..e93aa61
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that expressions of the form x = x.apply(...) don't break bytecode generation.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS bar() is 3
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/function-dot-apply-replace-base.js b/test/webkit/function-dot-apply-replace-base.js
new file mode 100644 (file)
index 0000000..ed0f84b
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that expressions of the form x = x.apply(...) don't break bytecode generation."
+);
+
+function foo(a,b) {
+    return a+b;
+}
+
+function bar() {
+    var x;
+
+    x = foo;
+
+    var array = [];
+    array.push(1);
+    array.push(2);
+
+    x = x.apply(void(0), array);
+
+    return x;
+}
+
+shouldBe("bar()", "3");
+
+
+
diff --git a/test/webkit/function-dot-length-read-only-expected.txt b/test/webkit/function-dot-length-read-only-expected.txt
new file mode 100644 (file)
index 0000000..1faff70
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that function.length correctly intercepts stores when a function is used as a prototype.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.length is 0
+PASS o.length is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/function-dot-length-read-only.js b/test/webkit/function-dot-length-read-only.js
new file mode 100644 (file)
index 0000000..679d8b9
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that function.length correctly intercepts stores when a function is used as a prototype."
+);
+
+function foo() { }
+
+function Bar() { }
+Bar.prototype = foo;
+
+var o = new Bar();
+shouldBe("o.length", "0");
+o.length = 42;
+shouldBe("o.length", "0");
diff --git a/test/webkit/function-prototype-descriptor-expected.txt b/test/webkit/function-prototype-descriptor-expected.txt
new file mode 100644 (file)
index 0000000..c9a1090
--- /dev/null
@@ -0,0 +1,42 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for function.prototype's property descriptor.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS descriptor['writable'] is true
+PASS descriptor['enumerable'] is false
+PASS descriptor['configurable'] is false
+PASS descriptor['writable'] is true
+PASS descriptor['enumerable'] is false
+PASS descriptor['configurable'] is false
+PASS Object.defineProperty(c, 'prototype', { get: function(){} }) threw exception TypeError: Cannot redefine property: prototype.
+PASS descriptor['writable'] is true
+PASS descriptor['enumerable'] is false
+PASS descriptor['configurable'] is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/function-prototype-descriptor.js b/test/webkit/function-prototype-descriptor.js
new file mode 100644 (file)
index 0000000..89a19e9
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test for function.prototype\'s property descriptor.'
+);
+
+function test(func)
+{
+    // test function.prototype has the correct attributes - writable, enumerable, non-configurable.
+    descriptor = Object.getOwnPropertyDescriptor(func, 'prototype');
+    shouldBeTrue("descriptor['writable']");
+    shouldBeFalse("descriptor['enumerable']");
+    shouldBeFalse("descriptor['configurable']");
+}
+
+// Test prototype's attributes are correct.
+function a() {}
+test(a);
+
+// Test prototype's attributes are correct, if assigned without first having being accessed.
+function b() {}
+b.prototype = {};
+test(b);
+
+// Given that prototype is non-configurable, defineProperty should not be able to assign a getter to it.
+function c() {}
+shouldThrow("Object.defineProperty(c, 'prototype', { get: function(){} })");
+test(c);
diff --git a/test/webkit/function-toString-object-literals-expected.txt b/test/webkit/function-toString-object-literals-expected.txt
new file mode 100644 (file)
index 0000000..1b37162
--- /dev/null
@@ -0,0 +1,53 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that object literals are serialized properly. It's needed in part because JavaScriptCore converts numeric property names to string and back.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS compileAndSerialize('a = { 1: null }') is 'a = { 1: null }'
+PASS compileAndSerialize('a = { 0: null }') is 'a = { 0: null }'
+PASS compileAndSerialize('a = { 1.0: null }') is 'a = { 1.0: null }'
+PASS compileAndSerialize('a = { "1.0": null }') is 'a = { "1.0": null }'
+PASS compileAndSerialize('a = { 1e-500: null }') is 'a = { 1e-500: null }'
+PASS compileAndSerialize('a = { 1e-300: null }') is 'a = { 1e-300: null }'
+PASS compileAndSerialize('a = { 1e300: null }') is 'a = { 1e300: null }'
+PASS compileAndSerialize('a = { 1e500: null }') is 'a = { 1e500: null }'
+PASS compileAndSerialize('a = { NaN: null }') is 'a = { NaN: null }'
+PASS compileAndSerialize('a = { Infinity: null }') is 'a = { Infinity: null }'
+PASS compileAndSerialize('a = { "1": null }') is 'a = { "1": null }'
+PASS compileAndSerialize('a = { "1hi": null }') is 'a = { "1hi": null }'
+PASS compileAndSerialize('a = { "\'": null }') is 'a = { "\'": null }'
+PASS compileAndSerialize('a = { "\\"": null }') is 'a = { "\\"": null }'
+PASS compileAndSerialize('a = { get x() { } }') is 'a = { get x() { } }'
+PASS compileAndSerialize('a = { set x(y) { } }') is 'a = { set x(y) { } }'
+PASS compileAndSerialize('a = { --1: null }') threw exception SyntaxError: Unexpected token --.
+PASS compileAndSerialize('a = { -NaN: null }') threw exception SyntaxError: Unexpected token -.
+PASS compileAndSerialize('a = { -0: null }') threw exception SyntaxError: Unexpected token -.
+PASS compileAndSerialize('a = { -0.0: null }') threw exception SyntaxError: Unexpected token -.
+PASS compileAndSerialize('a = { -Infinity: null }') threw exception SyntaxError: Unexpected token -.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/function-toString-object-literals.js b/test/webkit/function-toString-object-literals.js
new file mode 100644 (file)
index 0000000..0cf18b9
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that object literals are serialized properly. " +
+"It's needed in part because JavaScriptCore converts numeric property names to string and back."
+);
+
+function compileAndSerialize(expression)
+{
+    var f = eval("(function () { return " + expression + "; })");
+    var serializedString = f.toString();
+    serializedString = serializedString.replace(/[ \t\r\n]+/g, " ");
+    serializedString = serializedString.replace("function () { return ", "");
+    serializedString = serializedString.replace("; }", "");
+    return serializedString;
+}
+
+shouldBe("compileAndSerialize('a = { 1: null }')", "'a = { 1: null }'");
+shouldBe("compileAndSerialize('a = { 0: null }')", "'a = { 0: null }'");
+shouldBe("compileAndSerialize('a = { 1.0: null }')", "'a = { 1.0: null }'");
+shouldBe("compileAndSerialize('a = { \"1.0\": null }')", "'a = { \"1.0\": null }'");
+shouldBe("compileAndSerialize('a = { 1e-500: null }')", "'a = { 1e-500: null }'");
+shouldBe("compileAndSerialize('a = { 1e-300: null }')", "'a = { 1e-300: null }'");
+shouldBe("compileAndSerialize('a = { 1e300: null }')", "'a = { 1e300: null }'");
+shouldBe("compileAndSerialize('a = { 1e500: null }')", "'a = { 1e500: null }'");
+
+shouldBe("compileAndSerialize('a = { NaN: null }')", "'a = { NaN: null }'");
+shouldBe("compileAndSerialize('a = { Infinity: null }')", "'a = { Infinity: null }'");
+
+shouldBe("compileAndSerialize('a = { \"1\": null }')", "'a = { \"1\": null }'");
+shouldBe("compileAndSerialize('a = { \"1hi\": null }')", "'a = { \"1hi\": null }'");
+shouldBe("compileAndSerialize('a = { \"\\\'\": null }')", "'a = { \"\\\'\": null }'");
+shouldBe("compileAndSerialize('a = { \"\\\\\"\": null }')", "'a = { \"\\\\\"\": null }'");
+
+shouldBe("compileAndSerialize('a = { get x() { } }')", "'a = { get x() { } }'");
+shouldBe("compileAndSerialize('a = { set x(y) { } }')", "'a = { set x(y) { } }'");
+
+shouldThrow("compileAndSerialize('a = { --1: null }')");
+shouldThrow("compileAndSerialize('a = { -NaN: null }')");
+shouldThrow("compileAndSerialize('a = { -0: null }')");
+shouldThrow("compileAndSerialize('a = { -0.0: null }')");
+shouldThrow("compileAndSerialize('a = { -Infinity: null }')");
diff --git a/test/webkit/get-by-pname-expected.txt b/test/webkit/get-by-pname-expected.txt
new file mode 100644 (file)
index 0000000..29738eb
--- /dev/null
@@ -0,0 +1,532 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that op_get_by_pname is compiled correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/get-by-pname-non-final-object-expected.txt b/test/webkit/get-by-pname-non-final-object-expected.txt
new file mode 100644 (file)
index 0000000..b674132
--- /dev/null
@@ -0,0 +1,532 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that op_get_by_pname is compiled correctly for non-final objects.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS foo(o) is 11
+PASS foo(p) is 10
+PASS foo(q) is 3467
+PASS foo(r) is 113
+PASS foo(s) is 182
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/get-by-pname-non-final-object.js b/test/webkit/get-by-pname-non-final-object.js
new file mode 100644 (file)
index 0000000..f891af6
--- /dev/null
@@ -0,0 +1,73 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that op_get_by_pname is compiled correctly for non-final objects."
+);
+
+function foo(o) {
+    var result = 0;
+    for (var n in o)
+        result += o[n];
+    return result;
+}
+
+var o = new Date();
+var p = new Date();
+var q = new Date();
+var r = new Date();
+var s = new Date();
+o.a = 1;
+o.b = 3;
+o.c = 7;
+p.a = 1;
+p.b = 2;
+p.c = 3;
+p.d = 4;
+q.a = 1;
+q.b = 2;
+q.c = 3;
+q.d = 4;
+q.e = 3457;
+r.a = 1;
+r.b = 2;
+r.c = 3;
+r.d = 4;
+r.e = 91;
+r.f = 12;
+s.a = 1;
+s.b = 2;
+s.c = 3;
+s.d = 4;
+s.e = 91;
+s.f = 12;
+s.g = 69;
+
+for (var i = 0; i < 100; ++i) {
+    shouldBe("foo(o)", "11");
+    shouldBe("foo(p)", "10");
+    shouldBe("foo(q)", "3467");
+    shouldBe("foo(r)", "113");
+    shouldBe("foo(s)", "182");
+}
+
diff --git a/test/webkit/get-by-pname-that-looks-like-a-patchable-get-by-val-expected.txt b/test/webkit/get-by-pname-that-looks-like-a-patchable-get-by-val-expected.txt
new file mode 100644 (file)
index 0000000..b0e3837
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that using get_by_pname in a way that appears like a get_by_val that can be patched does not cause the patching machinery to crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo() is 300
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/get-by-pname-that-looks-like-a-patchable-get-by-val.js b/test/webkit/get-by-pname-that-looks-like-a-patchable-get-by-val.js
new file mode 100644 (file)
index 0000000..d3e69b6
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that using get_by_pname in a way that appears like a get_by_val that can be patched does not cause the patching machinery to crash."
+);
+
+function foo() {
+    var o = [1, 2, 3];
+    var result = 0;
+
+    for (var i = 0; i < 100; ++i) {
+        for (var s in o) {
+            s = 0;
+            result += o[s];
+        }
+    }
+
+    return result;
+}
+
+shouldBe("foo()", "300");
+
+
diff --git a/test/webkit/get-by-pname.js b/test/webkit/get-by-pname.js
new file mode 100644 (file)
index 0000000..13a7c5d
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that op_get_by_pname is compiled correctly."
+);
+
+function foo(o) {
+    var result = 0;
+    for (var n in o)
+        result += o[n];
+    return result;
+}
+
+var o = {a:1, b:3, c:7};
+var p = {a:1, b:2, c:3, d:4};
+var q = {a:1, b:2, c:3, d:4, e:3457};
+var r = {a:1, b:2, c:3, d:4, e:91, f:12};
+var s = {a:1, b:2, c:3, d:4, e:91, f:12, g:69};
+
+for (var i = 0; i < 100; ++i) {
+    shouldBe("foo(o)", "11");
+    shouldBe("foo(p)", "10");
+    shouldBe("foo(q)", "3467");
+    shouldBe("foo(r)", "113");
+    shouldBe("foo(s)", "182");
+}
+
diff --git a/test/webkit/getter-setter-gc-expected.txt b/test/webkit/getter-setter-gc-expected.txt
new file mode 100644 (file)
index 0000000..08ca42f
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks whether getters and setters work correctly with garbage collection.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.x is 242
+PASS o.x is 242
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/getter-setter-gc.js b/test/webkit/getter-setter-gc.js
new file mode 100644 (file)
index 0000000..108d8f2
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks whether getters and setters work correctly with garbage collection."
+);
+
+var o = {};
+o.__defineGetter__("x", function() { return 242; })
+
+shouldBe('o.x', '242');
+
+// Force a gc
+var i = 0;
+var s;
+while (i < 5000) {
+    i = i+1.11;
+    s = s + " ";
+}
+
+shouldBe('o.x', '242')
diff --git a/test/webkit/global-resolve-through-eval-expected.txt b/test/webkit/global-resolve-through-eval-expected.txt
new file mode 100644 (file)
index 0000000..ed09972
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Make sure we do a correct property resolution of a global object property when contained by eval.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS accessGlobal() is true
+PASS accessLocal() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/global-resolve-through-eval.js b/test/webkit/global-resolve-through-eval.js
new file mode 100644 (file)
index 0000000..c638231
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Make sure we do a correct property resolution of a global object property when contained by eval.");
+
+var pass = false;
+
+var accessGlobal = (function() { return eval("var pass=true; (function(){ return pass; })"); })();
+var accessLocal = (function() { var pass = false; return (function() { return eval("var pass=true; (function(){ return pass; })"); })(); })();
+
+shouldBeTrue("accessGlobal()");
+shouldBeTrue("accessLocal()");
diff --git a/test/webkit/gmail-re-re-expected.txt b/test/webkit/gmail-re-re-expected.txt
new file mode 100644 (file)
index 0000000..3adcf16
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Bug 7445, bug 7253: Handle Unicode escapes in regexps.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS cy("Re: Hello") is "Hello"
+PASS cy("Ответ: Hello") is "Hello"
+PASS regex.exec("24#Midnight").toString() is "24#Midnight,24,#,Midnight"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/gmail-re-re.js b/test/webkit/gmail-re-re.js
new file mode 100644 (file)
index 0000000..75ba4ba
--- /dev/null
@@ -0,0 +1,59 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Bug 7445, bug 7253: Handle Unicode escapes in regexps."
+);
+
+var I3=/^\s*(fwd|re|aw|antw|antwort|wg|sv|ang|odp|betreff|betr|transf|reenv\.|reenv|in|res|resp|resp\.|enc|\u8f6c\u53d1|\u56DE\u590D|\u041F\u0435\u0440\u0435\u0441\u043B|\u041E\u0442\u0432\u0435\u0442):\s*(.*)$/i;
+
+// Other RegExs from Gmail source
+var Ci=/\s+/g;
+var BC=/^ /;
+var BG=/ $/;
+
+// Strips leading Re or similar (from Gmail source)
+function cy(a) {
+    //var b = I3.exec(a);
+    var b = I3.exec(a);
+
+    if (b) {
+        a = b[2];
+    }
+
+    return Gn(a);
+}
+
+// This function replaces consecutive whitespace with a single space
+// then removes a leading and trailing space if they exist. (From Gmail)
+function Gn(a) {
+    return a.replace(Ci, " ").replace(BC, "").replace(BG, "");
+}
+
+shouldBe('cy("Re: Hello")', '"Hello"');
+shouldBe('cy("Ответ: Hello")', '"Hello"');
+
+// ---------------------------------------------------------------
+
+var regex = /^([^#<\u2264]+)([#<\u2264])(.*)$/;
+shouldBe('regex.exec("24#Midnight").toString()', '"24#Midnight,24,#,Midnight"');
diff --git a/test/webkit/has-own-property-expected.txt b/test/webkit/has-own-property-expected.txt
new file mode 100644 (file)
index 0000000..af68f3b
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test verifies the behaviour of Object.prototype.hasOwnProperty, as documented in ECMA-262 rev3 section 15.2.4.5.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS typeof {foo : 'yum'}.hasOwnProperty is "function"
+PASS ({foo : 'yum'}).hasOwnProperty('foo') is true
+PASS ''.hasOwnProperty('length') is true
+PASS ({foo : 'yum'}).hasOwnProperty('bar') is false
+PASS ({foo : 'yum'}).hasOwnProperty('toString') is false
+PASS ''.hasOwnProperty('toString') is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/has-own-property.js b/test/webkit/has-own-property.js
new file mode 100644 (file)
index 0000000..0e0e9ec
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test verifies the behaviour of Object.prototype.hasOwnProperty, as documented in ECMA-262 rev3 section 15.2.4.5."
+);
+
+shouldBe("typeof {foo : 'yum'}.hasOwnProperty", '"function"');
+
+shouldBeTrue("({foo : 'yum'}).hasOwnProperty('foo')");
+shouldBeTrue("''.hasOwnProperty('length')");
+shouldBeFalse("({foo : 'yum'}).hasOwnProperty('bar')");
+shouldBeFalse("({foo : 'yum'}).hasOwnProperty('toString')");
+shouldBeFalse("''.hasOwnProperty('toString')");
diff --git a/test/webkit/ignored-result-null-comparison-crash-expected.txt b/test/webkit/ignored-result-null-comparison-crash-expected.txt
new file mode 100644 (file)
index 0000000..4efe681
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that bytecode generation doesn't crash on a comparison to null with an ignored result.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS equalToNullTest() is true
+PASS notEqualToNullTest() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/ignored-result-null-comparison-crash.js b/test/webkit/ignored-result-null-comparison-crash.js
new file mode 100644 (file)
index 0000000..b648355
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that bytecode generation doesn't crash on a comparison to null with an ignored result."
+);
+
+function equalToNullTest(a)
+{
+    a == null;
+    return true;
+}
+
+shouldBeTrue("equalToNullTest()");
+
+function notEqualToNullTest(a)
+{
+    a != null;
+    return true;
+}
+
+shouldBeTrue("notEqualToNullTest()");
diff --git a/test/webkit/ignored-result-ref-crash-expected.txt b/test/webkit/ignored-result-ref-crash-expected.txt
new file mode 100644 (file)
index 0000000..115afd4
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that bytecode code generation doesn't crash when it encounters odd cases of an ignored result.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS emptyStatementDoWhileTest() is true
+PASS debuggerDoWhileTest() is true
+PASS continueDoWhileTest() is true
+PASS breakDoWhileTest() is true
+PASS tryDoWhileTest() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/ignored-result-ref-crash.js b/test/webkit/ignored-result-ref-crash.js
new file mode 100644 (file)
index 0000000..d2deea2
--- /dev/null
@@ -0,0 +1,86 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that bytecode code generation doesn't crash when it encounters odd cases of an ignored result."
+);
+
+function emptyStatementDoWhileTest()
+{
+    do
+        ;
+    while (false) { }
+    return true;
+}
+
+shouldBeTrue("emptyStatementDoWhileTest()");
+
+function debuggerDoWhileTest()
+{
+    do
+        debugger;
+    while (false) { }
+    return true;
+}
+
+shouldBeTrue("debuggerDoWhileTest()");
+
+function continueDoWhileTest()
+{
+    var i = 0;
+    do
+        i++;
+    while (i < 10) {
+        do
+            continue;
+        while (false) { }
+    }
+    return true;
+}
+
+shouldBeTrue("continueDoWhileTest()");
+
+function breakDoWhileTest()
+{
+    var i = 0;
+    do
+        i++;
+    while (i < 10) {
+        do
+            continue;
+        while (false) { }
+    }
+    return true;
+}
+
+shouldBeTrue("breakDoWhileTest()");
+
+function tryDoWhileTest()
+{
+    do
+        try { } catch (o) { }
+    while (false) { }
+    return true;
+}
+
+shouldBeTrue("tryDoWhileTest()");
diff --git a/test/webkit/indexed-setter-on-global-object-expected.txt b/test/webkit/indexed-setter-on-global-object-expected.txt
new file mode 100644 (file)
index 0000000..36d2516
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that creating an indexed setter on the global object doesn't break things.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS thingy is "foo"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/indexed-setter-on-global-object.js b/test/webkit/indexed-setter-on-global-object.js
new file mode 100644 (file)
index 0000000..8453206
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that creating an indexed setter on the global object doesn't break things."
+);
+
+var thingy;
+
+this.__defineSetter__(42, function(value) {
+    thingy = value;
+});
+
+this[42] = "foo";
+
+shouldBe("thingy", "\"foo\"");
+
diff --git a/test/webkit/instance-of-immediates-expected.txt b/test/webkit/instance-of-immediates-expected.txt
new file mode 100644 (file)
index 0000000..a6f6cc5
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test makes sure that instance of behaves correctly when the value, constructor, or its prototype are immediates.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (1 instanceof 1) threw exception TypeError: Expecting a function in instanceof check, but got 1.
+PASS ({} instanceof 1) threw exception TypeError: Expecting a function in instanceof check, but got #<Object>.
+PASS (obj instanceof 1) threw exception TypeError: Expecting a function in instanceof check, but got #<Constructor>.
+PASS (1 instanceof {}) threw exception TypeError: Expecting a function in instanceof check, but got 1.
+PASS ({} instanceof {}) threw exception TypeError: Expecting a function in instanceof check, but got #<Object>.
+PASS (obj instanceof {}) threw exception TypeError: Expecting a function in instanceof check, but got #<Constructor>.
+PASS (1 instanceof Constructor) is false
+PASS ({} instanceof Constructor) is false
+PASS (obj instanceof Constructor) is true
+PASS (1 instanceof Constructor) is false
+PASS ({} instanceof Constructor) threw exception TypeError: Function has non-object prototype '1' in instanceof check.
+PASS (obj instanceof Constructor) threw exception TypeError: Function has non-object prototype '1' in instanceof check.
+PASS (1 instanceof Constructor) is false
+PASS ({} instanceof Constructor) is false
+PASS (obj instanceof Constructor) is false
+PASS (1 instanceof Constructor) is false
+PASS ({} instanceof Constructor) threw exception TypeError: Function has non-object prototype 'null' in instanceof check.
+PASS (obj instanceof Constructor) threw exception TypeError: Function has non-object prototype 'null' in instanceof check.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/instance-of-immediates.js b/test/webkit/instance-of-immediates.js
new file mode 100644 (file)
index 0000000..649a29f
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('This test makes sure that instance of behaves correctly when the value, constructor, or its prototype are immediates.');
+
+// A Constructor to use check for instances of, and an instance called obj.
+function Constructor() {}
+var obj = new Constructor();
+
+// Run a batch of tests; call'testInstanceOf' three times, passing 1, {}, and the object 'obj', which is an instance of Constructor.
+function testSet(constructor, testMethod)
+{
+    testMethod["1"]("(1 instanceof " + constructor + ")");
+    testMethod["{}"]("({} instanceof " + constructor + ")");
+    testMethod["obj"]("(obj instanceof " + constructor + ")");
+}
+
+// Test set 1, test passing the integer 1 as the constructor to be tested for.
+// The constructor being an object is the first thing tested, so these should all throw.
+testSet("1", { "1":shouldThrow, "{}":shouldThrow, "obj":shouldThrow });
+
+// Test set 2, test passing an empty object ({}) as the constructor to be tested for.
+// As well as being an object, the constructor must implement 'HasInstance' (i.e. be a function), so these should all throw too.
+testSet("{}", { "1":shouldThrow, "{}":shouldThrow, "obj":shouldThrow });
+
+// Test set 3, test passing Constructor as the constructor to be tested for.
+// Nothing should except, the third test should pass, since obj is an instance of Constructor.
+testSet("Constructor", { "1":shouldBeFalse, "{}":shouldBeFalse, "obj":shouldBeTrue });
+
+// Test set 4, test passing Constructor as the constructor to be tested for - with Constructor.prototype set to the integer 1.
+// Constructor.prototype being a non-object will cause an exception, /unless/ value is also a non-object, since this is checked first.
+Constructor.prototype = 1;
+testSet("Constructor", { "1":shouldBeFalse, "{}":shouldThrow, "obj":shouldThrow });
+
+// Test set 5, test passing Constructor as the constructor to be tested for - with Constructor.prototype set to an empty object ({}).
+// All test fail, no reason to throw.  (obj instanceof Constructor) is now false, since Constructor.prototype has changed.
+Constructor.prototype = {};
+testSet("Constructor", { "1":shouldBeFalse, "{}":shouldBeFalse, "obj":shouldBeFalse });
+
+// Test set 6, test passing Constructor as the constructor to be tested for - with Constructor.prototype set to null.
+// Test that behaviour is the same as for test set 4.
+Constructor.prototype = null;
+testSet("Constructor", { "1":shouldBeFalse, "{}":shouldThrow, "obj":shouldThrow });
diff --git a/test/webkit/instanceof-operator-expected.txt b/test/webkit/instanceof-operator-expected.txt
new file mode 100644 (file)
index 0000000..6ea1d27
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+instanceof test
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS getterCalled is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/instanceof-operator.js b/test/webkit/instanceof-operator.js
new file mode 100644 (file)
index 0000000..1230181
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"instanceof test"
+);
+
+getterCalled = false;
+try {
+    ({} instanceof { get prototype(){ getterCalled = true; } });
+} catch (e) {
+}
+shouldBeFalse("getterCalled");
diff --git a/test/webkit/integer-extremes-expected.txt b/test/webkit/integer-extremes-expected.txt
new file mode 100644 (file)
index 0000000..3836be7
--- /dev/null
@@ -0,0 +1,641 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test verifies that the bit twiddling done in JavaScriptCore's integer machinery works correctly on the current platform.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (-1).toString() is "-1"
+PASS (0).toString() is "0"
+PASS (-0).toString() is "0"
+
+bits used to store value: 8
+PASS min.toString() is "-128"
+PASS (min - 1).toString() is "-129"
+PASS max.toString() is "127"
+PASS (max + 1).toString() is "128"
+bits used to store value: 9
+PASS min.toString() is "-256"
+PASS (min - 1).toString() is "-257"
+PASS max.toString() is "255"
+PASS (max + 1).toString() is "256"
+bits used to store value: 10
+PASS min.toString() is "-512"
+PASS (min - 1).toString() is "-513"
+PASS max.toString() is "511"
+PASS (max + 1).toString() is "512"
+bits used to store value: 11
+PASS min.toString() is "-1024"
+PASS (min - 1).toString() is "-1025"
+PASS max.toString() is "1023"
+PASS (max + 1).toString() is "1024"
+bits used to store value: 12
+PASS min.toString() is "-2048"
+PASS (min - 1).toString() is "-2049"
+PASS max.toString() is "2047"
+PASS (max + 1).toString() is "2048"
+bits used to store value: 13
+PASS min.toString() is "-4096"
+PASS (min - 1).toString() is "-4097"
+PASS max.toString() is "4095"
+PASS (max + 1).toString() is "4096"
+bits used to store value: 14
+PASS min.toString() is "-8192"
+PASS (min - 1).toString() is "-8193"
+PASS max.toString() is "8191"
+PASS (max + 1).toString() is "8192"
+bits used to store value: 15
+PASS min.toString() is "-16384"
+PASS (min - 1).toString() is "-16385"
+PASS max.toString() is "16383"
+PASS (max + 1).toString() is "16384"
+bits used to store value: 16
+PASS min.toString() is "-32768"
+PASS (min - 1).toString() is "-32769"
+PASS max.toString() is "32767"
+PASS (max + 1).toString() is "32768"
+bits used to store value: 17
+PASS min.toString() is "-65536"
+PASS (min - 1).toString() is "-65537"
+PASS max.toString() is "65535"
+PASS (max + 1).toString() is "65536"
+bits used to store value: 18
+PASS min.toString() is "-131072"
+PASS (min - 1).toString() is "-131073"
+PASS max.toString() is "131071"
+PASS (max + 1).toString() is "131072"
+bits used to store value: 19
+PASS min.toString() is "-262144"
+PASS (min - 1).toString() is "-262145"
+PASS max.toString() is "262143"
+PASS (max + 1).toString() is "262144"
+bits used to store value: 20
+PASS min.toString() is "-524288"
+PASS (min - 1).toString() is "-524289"
+PASS max.toString() is "524287"
+PASS (max + 1).toString() is "524288"
+bits used to store value: 21
+PASS min.toString() is "-1048576"
+PASS (min - 1).toString() is "-1048577"
+PASS max.toString() is "1048575"
+PASS (max + 1).toString() is "1048576"
+bits used to store value: 22
+PASS min.toString() is "-2097152"
+PASS (min - 1).toString() is "-2097153"
+PASS max.toString() is "2097151"
+PASS (max + 1).toString() is "2097152"
+bits used to store value: 23
+PASS min.toString() is "-4194304"
+PASS (min - 1).toString() is "-4194305"
+PASS max.toString() is "4194303"
+PASS (max + 1).toString() is "4194304"
+bits used to store value: 24
+PASS min.toString() is "-8388608"
+PASS (min - 1).toString() is "-8388609"
+PASS max.toString() is "8388607"
+PASS (max + 1).toString() is "8388608"
+bits used to store value: 25
+PASS min.toString() is "-16777216"
+PASS (min - 1).toString() is "-16777217"
+PASS max.toString() is "16777215"
+PASS (max + 1).toString() is "16777216"
+bits used to store value: 26
+PASS min.toString() is "-33554432"
+PASS (min - 1).toString() is "-33554433"
+PASS max.toString() is "33554431"
+PASS (max + 1).toString() is "33554432"
+bits used to store value: 27
+PASS min.toString() is "-67108864"
+PASS (min - 1).toString() is "-67108865"
+PASS max.toString() is "67108863"
+PASS (max + 1).toString() is "67108864"
+bits used to store value: 28
+PASS min.toString() is "-134217728"
+PASS (min - 1).toString() is "-134217729"
+PASS max.toString() is "134217727"
+PASS (max + 1).toString() is "134217728"
+bits used to store value: 29
+PASS min.toString() is "-268435456"
+PASS (min - 1).toString() is "-268435457"
+PASS max.toString() is "268435455"
+PASS (max + 1).toString() is "268435456"
+bits used to store value: 30
+PASS min.toString() is "-536870912"
+PASS (min - 1).toString() is "-536870913"
+PASS max.toString() is "536870911"
+PASS (max + 1).toString() is "536870912"
+bits used to store value: 31
+PASS min.toString() is "-1073741824"
+PASS (min - 1).toString() is "-1073741825"
+PASS max.toString() is "1073741823"
+PASS (max + 1).toString() is "1073741824"
+bits used to store value: 32
+PASS min.toString() is "-2147483648"
+PASS (min - 1).toString() is "-2147483649"
+PASS max.toString() is "2147483647"
+PASS (max + 1).toString() is "2147483648"
+bits used to store value: 33
+PASS min.toString() is "-4294967296"
+PASS (min - 1).toString() is "-4294967297"
+PASS max.toString() is "4294967295"
+PASS (max + 1).toString() is "4294967296"
+bits used to store value: 34
+PASS min.toString() is "-8589934592"
+PASS (min - 1).toString() is "-8589934593"
+PASS max.toString() is "8589934591"
+PASS (max + 1).toString() is "8589934592"
+bits used to store value: 35
+PASS min.toString() is "-17179869184"
+PASS (min - 1).toString() is "-17179869185"
+PASS max.toString() is "17179869183"
+PASS (max + 1).toString() is "17179869184"
+bits used to store value: 36
+PASS min.toString() is "-34359738368"
+PASS (min - 1).toString() is "-34359738369"
+PASS max.toString() is "34359738367"
+PASS (max + 1).toString() is "34359738368"
+bits used to store value: 37
+PASS min.toString() is "-68719476736"
+PASS (min - 1).toString() is "-68719476737"
+PASS max.toString() is "68719476735"
+PASS (max + 1).toString() is "68719476736"
+bits used to store value: 38
+PASS min.toString() is "-137438953472"
+PASS (min - 1).toString() is "-137438953473"
+PASS max.toString() is "137438953471"
+PASS (max + 1).toString() is "137438953472"
+bits used to store value: 39
+PASS min.toString() is "-274877906944"
+PASS (min - 1).toString() is "-274877906945"
+PASS max.toString() is "274877906943"
+PASS (max + 1).toString() is "274877906944"
+bits used to store value: 40
+PASS min.toString() is "-549755813888"
+PASS (min - 1).toString() is "-549755813889"
+PASS max.toString() is "549755813887"
+PASS (max + 1).toString() is "549755813888"
+bits used to store value: 41
+PASS min.toString() is "-1099511627776"
+PASS (min - 1).toString() is "-1099511627777"
+PASS max.toString() is "1099511627775"
+PASS (max + 1).toString() is "1099511627776"
+bits used to store value: 42
+PASS min.toString() is "-2199023255552"
+PASS (min - 1).toString() is "-2199023255553"
+PASS max.toString() is "2199023255551"
+PASS (max + 1).toString() is "2199023255552"
+bits used to store value: 43
+PASS min.toString() is "-4398046511104"
+PASS (min - 1).toString() is "-4398046511105"
+PASS max.toString() is "4398046511103"
+PASS (max + 1).toString() is "4398046511104"
+bits used to store value: 44
+PASS min.toString() is "-8796093022208"
+PASS (min - 1).toString() is "-8796093022209"
+PASS max.toString() is "8796093022207"
+PASS (max + 1).toString() is "8796093022208"
+bits used to store value: 45
+PASS min.toString() is "-17592186044416"
+PASS (min - 1).toString() is "-17592186044417"
+PASS max.toString() is "17592186044415"
+PASS (max + 1).toString() is "17592186044416"
+bits used to store value: 46
+PASS min.toString() is "-35184372088832"
+PASS (min - 1).toString() is "-35184372088833"
+PASS max.toString() is "35184372088831"
+PASS (max + 1).toString() is "35184372088832"
+bits used to store value: 47
+PASS min.toString() is "-70368744177664"
+PASS (min - 1).toString() is "-70368744177665"
+PASS max.toString() is "70368744177663"
+PASS (max + 1).toString() is "70368744177664"
+bits used to store value: 48
+PASS min.toString() is "-140737488355328"
+PASS (min - 1).toString() is "-140737488355329"
+PASS max.toString() is "140737488355327"
+PASS (max + 1).toString() is "140737488355328"
+bits used to store value: 49
+PASS min.toString() is "-281474976710656"
+PASS (min - 1).toString() is "-281474976710657"
+PASS max.toString() is "281474976710655"
+PASS (max + 1).toString() is "281474976710656"
+bits used to store value: 50
+PASS min.toString() is "-562949953421312"
+PASS (min - 1).toString() is "-562949953421313"
+PASS max.toString() is "562949953421311"
+PASS (max + 1).toString() is "562949953421312"
+bits used to store value: 51
+PASS min.toString() is "-1125899906842624"
+PASS (min - 1).toString() is "-1125899906842625"
+PASS max.toString() is "1125899906842623"
+PASS (max + 1).toString() is "1125899906842624"
+bits used to store value: 52
+PASS min.toString() is "-2251799813685248"
+PASS (min - 1).toString() is "-2251799813685249"
+PASS max.toString() is "2251799813685247"
+PASS (max + 1).toString() is "2251799813685248"
+bits used to store value: 53
+PASS min.toString() is "-4503599627370496"
+PASS (min - 1).toString() is "-4503599627370497"
+PASS max.toString() is "4503599627370495"
+PASS (max + 1).toString() is "4503599627370496"
+bits used to store value: 54
+PASS min.toString() is "-9007199254740992"
+PASS (min - 1).toString() is "-9007199254740992"
+PASS max.toString() is "9007199254740991"
+PASS (max + 1).toString() is "9007199254740992"
+bits used to store value: 55
+PASS min.toString() is "-18014398509481984"
+PASS (min - 1).toString() is "-18014398509481984"
+PASS max.toString() is "18014398509481984"
+PASS (max + 1).toString() is "18014398509481984"
+bits used to store value: 56
+PASS min.toString() is "-36028797018963970"
+PASS (min - 1).toString() is "-36028797018963970"
+PASS max.toString() is "36028797018963970"
+PASS (max + 1).toString() is "36028797018963970"
+bits used to store value: 57
+PASS min.toString() is "-72057594037927940"
+PASS (min - 1).toString() is "-72057594037927940"
+PASS max.toString() is "72057594037927940"
+PASS (max + 1).toString() is "72057594037927940"
+bits used to store value: 58
+PASS min.toString() is "-144115188075855870"
+PASS (min - 1).toString() is "-144115188075855870"
+PASS max.toString() is "144115188075855870"
+PASS (max + 1).toString() is "144115188075855870"
+bits used to store value: 59
+PASS min.toString() is "-288230376151711740"
+PASS (min - 1).toString() is "-288230376151711740"
+PASS max.toString() is "288230376151711740"
+PASS (max + 1).toString() is "288230376151711740"
+bits used to store value: 60
+PASS min.toString() is "-576460752303423500"
+PASS (min - 1).toString() is "-576460752303423500"
+PASS max.toString() is "576460752303423500"
+PASS (max + 1).toString() is "576460752303423500"
+bits used to store value: 61
+PASS min.toString() is "-1152921504606847000"
+PASS (min - 1).toString() is "-1152921504606847000"
+PASS max.toString() is "1152921504606847000"
+PASS (max + 1).toString() is "1152921504606847000"
+bits used to store value: 62
+PASS min.toString() is "-2305843009213694000"
+PASS (min - 1).toString() is "-2305843009213694000"
+PASS max.toString() is "2305843009213694000"
+PASS (max + 1).toString() is "2305843009213694000"
+bits used to store value: 63
+PASS min.toString() is "-4611686018427388000"
+PASS (min - 1).toString() is "-4611686018427388000"
+PASS max.toString() is "4611686018427388000"
+PASS (max + 1).toString() is "4611686018427388000"
+bits used to store value: 64
+PASS min.toString() is "-9223372036854776000"
+PASS (min - 1).toString() is "-9223372036854776000"
+PASS max.toString() is "9223372036854776000"
+PASS (max + 1).toString() is "9223372036854776000"
+bits used to store value: 65
+PASS min.toString() is "-18446744073709552000"
+PASS (min - 1).toString() is "-18446744073709552000"
+PASS max.toString() is "18446744073709552000"
+PASS (max + 1).toString() is "18446744073709552000"
+bits used to store value: 66
+PASS min.toString() is "-36893488147419103000"
+PASS (min - 1).toString() is "-36893488147419103000"
+PASS max.toString() is "36893488147419103000"
+PASS (max + 1).toString() is "36893488147419103000"
+bits used to store value: 67
+PASS min.toString() is "-73786976294838210000"
+PASS (min - 1).toString() is "-73786976294838210000"
+PASS max.toString() is "73786976294838210000"
+PASS (max + 1).toString() is "73786976294838210000"
+bits used to store value: 68
+PASS min.toString() is "-147573952589676410000"
+PASS (min - 1).toString() is "-147573952589676410000"
+PASS max.toString() is "147573952589676410000"
+PASS (max + 1).toString() is "147573952589676410000"
+bits used to store value: 69
+PASS min.toString() is "-295147905179352830000"
+PASS (min - 1).toString() is "-295147905179352830000"
+PASS max.toString() is "295147905179352830000"
+PASS (max + 1).toString() is "295147905179352830000"
+bits used to store value: 70
+PASS min.toString() is "-590295810358705700000"
+PASS (min - 1).toString() is "-590295810358705700000"
+PASS max.toString() is "590295810358705700000"
+PASS (max + 1).toString() is "590295810358705700000"
+bits used to store value: 71
+PASS min.toString() is "-1.1805916207174113e+21"
+PASS (min - 1).toString() is "-1.1805916207174113e+21"
+PASS max.toString() is "1.1805916207174113e+21"
+PASS (max + 1).toString() is "1.1805916207174113e+21"
+bits used to store value: 72
+PASS min.toString() is "-2.3611832414348226e+21"
+PASS (min - 1).toString() is "-2.3611832414348226e+21"
+PASS max.toString() is "2.3611832414348226e+21"
+PASS (max + 1).toString() is "2.3611832414348226e+21"
+bits used to store value: 73
+PASS min.toString() is "-4.722366482869645e+21"
+PASS (min - 1).toString() is "-4.722366482869645e+21"
+PASS max.toString() is "4.722366482869645e+21"
+PASS (max + 1).toString() is "4.722366482869645e+21"
+bits used to store value: 74
+PASS min.toString() is "-9.44473296573929e+21"
+PASS (min - 1).toString() is "-9.44473296573929e+21"
+PASS max.toString() is "9.44473296573929e+21"
+PASS (max + 1).toString() is "9.44473296573929e+21"
+bits used to store value: 75
+PASS min.toString() is "-1.888946593147858e+22"
+PASS (min - 1).toString() is "-1.888946593147858e+22"
+PASS max.toString() is "1.888946593147858e+22"
+PASS (max + 1).toString() is "1.888946593147858e+22"
+bits used to store value: 76
+PASS min.toString() is "-3.777893186295716e+22"
+PASS (min - 1).toString() is "-3.777893186295716e+22"
+PASS max.toString() is "3.777893186295716e+22"
+PASS (max + 1).toString() is "3.777893186295716e+22"
+bits used to store value: 77
+PASS min.toString() is "-7.555786372591432e+22"
+PASS (min - 1).toString() is "-7.555786372591432e+22"
+PASS max.toString() is "7.555786372591432e+22"
+PASS (max + 1).toString() is "7.555786372591432e+22"
+bits used to store value: 78
+PASS min.toString() is "-1.5111572745182865e+23"
+PASS (min - 1).toString() is "-1.5111572745182865e+23"
+PASS max.toString() is "1.5111572745182865e+23"
+PASS (max + 1).toString() is "1.5111572745182865e+23"
+bits used to store value: 79
+PASS min.toString() is "-3.022314549036573e+23"
+PASS (min - 1).toString() is "-3.022314549036573e+23"
+PASS max.toString() is "3.022314549036573e+23"
+PASS (max + 1).toString() is "3.022314549036573e+23"
+bits used to store value: 80
+PASS min.toString() is "-6.044629098073146e+23"
+PASS (min - 1).toString() is "-6.044629098073146e+23"
+PASS max.toString() is "6.044629098073146e+23"
+PASS (max + 1).toString() is "6.044629098073146e+23"
+bits used to store value: 81
+PASS min.toString() is "-1.2089258196146292e+24"
+PASS (min - 1).toString() is "-1.2089258196146292e+24"
+PASS max.toString() is "1.2089258196146292e+24"
+PASS (max + 1).toString() is "1.2089258196146292e+24"
+bits used to store value: 82
+PASS min.toString() is "-2.4178516392292583e+24"
+PASS (min - 1).toString() is "-2.4178516392292583e+24"
+PASS max.toString() is "2.4178516392292583e+24"
+PASS (max + 1).toString() is "2.4178516392292583e+24"
+bits used to store value: 83
+PASS min.toString() is "-4.835703278458517e+24"
+PASS (min - 1).toString() is "-4.835703278458517e+24"
+PASS max.toString() is "4.835703278458517e+24"
+PASS (max + 1).toString() is "4.835703278458517e+24"
+bits used to store value: 84
+PASS min.toString() is "-9.671406556917033e+24"
+PASS (min - 1).toString() is "-9.671406556917033e+24"
+PASS max.toString() is "9.671406556917033e+24"
+PASS (max + 1).toString() is "9.671406556917033e+24"
+bits used to store value: 85
+PASS min.toString() is "-1.9342813113834067e+25"
+PASS (min - 1).toString() is "-1.9342813113834067e+25"
+PASS max.toString() is "1.9342813113834067e+25"
+PASS (max + 1).toString() is "1.9342813113834067e+25"
+bits used to store value: 86
+PASS min.toString() is "-3.8685626227668134e+25"
+PASS (min - 1).toString() is "-3.8685626227668134e+25"
+PASS max.toString() is "3.8685626227668134e+25"
+PASS (max + 1).toString() is "3.8685626227668134e+25"
+bits used to store value: 87
+PASS min.toString() is "-7.737125245533627e+25"
+PASS (min - 1).toString() is "-7.737125245533627e+25"
+PASS max.toString() is "7.737125245533627e+25"
+PASS (max + 1).toString() is "7.737125245533627e+25"
+bits used to store value: 88
+PASS min.toString() is "-1.5474250491067253e+26"
+PASS (min - 1).toString() is "-1.5474250491067253e+26"
+PASS max.toString() is "1.5474250491067253e+26"
+PASS (max + 1).toString() is "1.5474250491067253e+26"
+bits used to store value: 89
+PASS min.toString() is "-3.094850098213451e+26"
+PASS (min - 1).toString() is "-3.094850098213451e+26"
+PASS max.toString() is "3.094850098213451e+26"
+PASS (max + 1).toString() is "3.094850098213451e+26"
+bits used to store value: 90
+PASS min.toString() is "-6.189700196426902e+26"
+PASS (min - 1).toString() is "-6.189700196426902e+26"
+PASS max.toString() is "6.189700196426902e+26"
+PASS (max + 1).toString() is "6.189700196426902e+26"
+bits used to store value: 91
+PASS min.toString() is "-1.2379400392853803e+27"
+PASS (min - 1).toString() is "-1.2379400392853803e+27"
+PASS max.toString() is "1.2379400392853803e+27"
+PASS (max + 1).toString() is "1.2379400392853803e+27"
+bits used to store value: 92
+PASS min.toString() is "-2.4758800785707605e+27"
+PASS (min - 1).toString() is "-2.4758800785707605e+27"
+PASS max.toString() is "2.4758800785707605e+27"
+PASS (max + 1).toString() is "2.4758800785707605e+27"
+bits used to store value: 93
+PASS min.toString() is "-4.951760157141521e+27"
+PASS (min - 1).toString() is "-4.951760157141521e+27"
+PASS max.toString() is "4.951760157141521e+27"
+PASS (max + 1).toString() is "4.951760157141521e+27"
+bits used to store value: 94
+PASS min.toString() is "-9.903520314283042e+27"
+PASS (min - 1).toString() is "-9.903520314283042e+27"
+PASS max.toString() is "9.903520314283042e+27"
+PASS (max + 1).toString() is "9.903520314283042e+27"
+bits used to store value: 95
+PASS min.toString() is "-1.9807040628566084e+28"
+PASS (min - 1).toString() is "-1.9807040628566084e+28"
+PASS max.toString() is "1.9807040628566084e+28"
+PASS (max + 1).toString() is "1.9807040628566084e+28"
+bits used to store value: 96
+PASS min.toString() is "-3.961408125713217e+28"
+PASS (min - 1).toString() is "-3.961408125713217e+28"
+PASS max.toString() is "3.961408125713217e+28"
+PASS (max + 1).toString() is "3.961408125713217e+28"
+bits used to store value: 97
+PASS min.toString() is "-7.922816251426434e+28"
+PASS (min - 1).toString() is "-7.922816251426434e+28"
+PASS max.toString() is "7.922816251426434e+28"
+PASS (max + 1).toString() is "7.922816251426434e+28"
+bits used to store value: 98
+PASS min.toString() is "-1.5845632502852868e+29"
+PASS (min - 1).toString() is "-1.5845632502852868e+29"
+PASS max.toString() is "1.5845632502852868e+29"
+PASS (max + 1).toString() is "1.5845632502852868e+29"
+bits used to store value: 99
+PASS min.toString() is "-3.1691265005705735e+29"
+PASS (min - 1).toString() is "-3.1691265005705735e+29"
+PASS max.toString() is "3.1691265005705735e+29"
+PASS (max + 1).toString() is "3.1691265005705735e+29"
+bits used to store value: 100
+PASS min.toString() is "-6.338253001141147e+29"
+PASS (min - 1).toString() is "-6.338253001141147e+29"
+PASS max.toString() is "6.338253001141147e+29"
+PASS (max + 1).toString() is "6.338253001141147e+29"
+bits used to store value: 101
+PASS min.toString() is "-1.2676506002282294e+30"
+PASS (min - 1).toString() is "-1.2676506002282294e+30"
+PASS max.toString() is "1.2676506002282294e+30"
+PASS (max + 1).toString() is "1.2676506002282294e+30"
+bits used to store value: 102
+PASS min.toString() is "-2.535301200456459e+30"
+PASS (min - 1).toString() is "-2.535301200456459e+30"
+PASS max.toString() is "2.535301200456459e+30"
+PASS (max + 1).toString() is "2.535301200456459e+30"
+bits used to store value: 103
+PASS min.toString() is "-5.070602400912918e+30"
+PASS (min - 1).toString() is "-5.070602400912918e+30"
+PASS max.toString() is "5.070602400912918e+30"
+PASS (max + 1).toString() is "5.070602400912918e+30"
+bits used to store value: 104
+PASS min.toString() is "-1.0141204801825835e+31"
+PASS (min - 1).toString() is "-1.0141204801825835e+31"
+PASS max.toString() is "1.0141204801825835e+31"
+PASS (max + 1).toString() is "1.0141204801825835e+31"
+bits used to store value: 105
+PASS min.toString() is "-2.028240960365167e+31"
+PASS (min - 1).toString() is "-2.028240960365167e+31"
+PASS max.toString() is "2.028240960365167e+31"
+PASS (max + 1).toString() is "2.028240960365167e+31"
+bits used to store value: 106
+PASS min.toString() is "-4.056481920730334e+31"
+PASS (min - 1).toString() is "-4.056481920730334e+31"
+PASS max.toString() is "4.056481920730334e+31"
+PASS (max + 1).toString() is "4.056481920730334e+31"
+bits used to store value: 107
+PASS min.toString() is "-8.112963841460668e+31"
+PASS (min - 1).toString() is "-8.112963841460668e+31"
+PASS max.toString() is "8.112963841460668e+31"
+PASS (max + 1).toString() is "8.112963841460668e+31"
+bits used to store value: 108
+PASS min.toString() is "-1.6225927682921336e+32"
+PASS (min - 1).toString() is "-1.6225927682921336e+32"
+PASS max.toString() is "1.6225927682921336e+32"
+PASS (max + 1).toString() is "1.6225927682921336e+32"
+bits used to store value: 109
+PASS min.toString() is "-3.2451855365842673e+32"
+PASS (min - 1).toString() is "-3.2451855365842673e+32"
+PASS max.toString() is "3.2451855365842673e+32"
+PASS (max + 1).toString() is "3.2451855365842673e+32"
+bits used to store value: 110
+PASS min.toString() is "-6.490371073168535e+32"
+PASS (min - 1).toString() is "-6.490371073168535e+32"
+PASS max.toString() is "6.490371073168535e+32"
+PASS (max + 1).toString() is "6.490371073168535e+32"
+bits used to store value: 111
+PASS min.toString() is "-1.298074214633707e+33"
+PASS (min - 1).toString() is "-1.298074214633707e+33"
+PASS max.toString() is "1.298074214633707e+33"
+PASS (max + 1).toString() is "1.298074214633707e+33"
+bits used to store value: 112
+PASS min.toString() is "-2.596148429267414e+33"
+PASS (min - 1).toString() is "-2.596148429267414e+33"
+PASS max.toString() is "2.596148429267414e+33"
+PASS (max + 1).toString() is "2.596148429267414e+33"
+bits used to store value: 113
+PASS min.toString() is "-5.192296858534828e+33"
+PASS (min - 1).toString() is "-5.192296858534828e+33"
+PASS max.toString() is "5.192296858534828e+33"
+PASS (max + 1).toString() is "5.192296858534828e+33"
+bits used to store value: 114
+PASS min.toString() is "-1.0384593717069655e+34"
+PASS (min - 1).toString() is "-1.0384593717069655e+34"
+PASS max.toString() is "1.0384593717069655e+34"
+PASS (max + 1).toString() is "1.0384593717069655e+34"
+bits used to store value: 115
+PASS min.toString() is "-2.076918743413931e+34"
+PASS (min - 1).toString() is "-2.076918743413931e+34"
+PASS max.toString() is "2.076918743413931e+34"
+PASS (max + 1).toString() is "2.076918743413931e+34"
+bits used to store value: 116
+PASS min.toString() is "-4.153837486827862e+34"
+PASS (min - 1).toString() is "-4.153837486827862e+34"
+PASS max.toString() is "4.153837486827862e+34"
+PASS (max + 1).toString() is "4.153837486827862e+34"
+bits used to store value: 117
+PASS min.toString() is "-8.307674973655724e+34"
+PASS (min - 1).toString() is "-8.307674973655724e+34"
+PASS max.toString() is "8.307674973655724e+34"
+PASS (max + 1).toString() is "8.307674973655724e+34"
+bits used to store value: 118
+PASS min.toString() is "-1.661534994731145e+35"
+PASS (min - 1).toString() is "-1.661534994731145e+35"
+PASS max.toString() is "1.661534994731145e+35"
+PASS (max + 1).toString() is "1.661534994731145e+35"
+bits used to store value: 119
+PASS min.toString() is "-3.32306998946229e+35"
+PASS (min - 1).toString() is "-3.32306998946229e+35"
+PASS max.toString() is "3.32306998946229e+35"
+PASS (max + 1).toString() is "3.32306998946229e+35"
+bits used to store value: 120
+PASS min.toString() is "-6.64613997892458e+35"
+PASS (min - 1).toString() is "-6.64613997892458e+35"
+PASS max.toString() is "6.64613997892458e+35"
+PASS (max + 1).toString() is "6.64613997892458e+35"
+bits used to store value: 121
+PASS min.toString() is "-1.329227995784916e+36"
+PASS (min - 1).toString() is "-1.329227995784916e+36"
+PASS max.toString() is "1.329227995784916e+36"
+PASS (max + 1).toString() is "1.329227995784916e+36"
+bits used to store value: 122
+PASS min.toString() is "-2.658455991569832e+36"
+PASS (min - 1).toString() is "-2.658455991569832e+36"
+PASS max.toString() is "2.658455991569832e+36"
+PASS (max + 1).toString() is "2.658455991569832e+36"
+bits used to store value: 123
+PASS min.toString() is "-5.316911983139664e+36"
+PASS (min - 1).toString() is "-5.316911983139664e+36"
+PASS max.toString() is "5.316911983139664e+36"
+PASS (max + 1).toString() is "5.316911983139664e+36"
+bits used to store value: 124
+PASS min.toString() is "-1.0633823966279327e+37"
+PASS (min - 1).toString() is "-1.0633823966279327e+37"
+PASS max.toString() is "1.0633823966279327e+37"
+PASS (max + 1).toString() is "1.0633823966279327e+37"
+bits used to store value: 125
+PASS min.toString() is "-2.1267647932558654e+37"
+PASS (min - 1).toString() is "-2.1267647932558654e+37"
+PASS max.toString() is "2.1267647932558654e+37"
+PASS (max + 1).toString() is "2.1267647932558654e+37"
+bits used to store value: 126
+PASS min.toString() is "-4.253529586511731e+37"
+PASS (min - 1).toString() is "-4.253529586511731e+37"
+PASS max.toString() is "4.253529586511731e+37"
+PASS (max + 1).toString() is "4.253529586511731e+37"
+bits used to store value: 127
+PASS min.toString() is "-8.507059173023462e+37"
+PASS (min - 1).toString() is "-8.507059173023462e+37"
+PASS max.toString() is "8.507059173023462e+37"
+PASS (max + 1).toString() is "8.507059173023462e+37"
+bits used to store value: 128
+PASS min.toString() is "-1.7014118346046923e+38"
+PASS (min - 1).toString() is "-1.7014118346046923e+38"
+PASS max.toString() is "1.7014118346046923e+38"
+PASS (max + 1).toString() is "1.7014118346046923e+38"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/integer-extremes.js b/test/webkit/integer-extremes.js
new file mode 100644 (file)
index 0000000..523805c
--- /dev/null
@@ -0,0 +1,165 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test verifies that the bit twiddling done in JavaScriptCore's integer machinery works correctly on the current platform."
+);
+
+shouldBe("(-1).toString()", '"-1"');
+shouldBe("(0).toString()", '"0"');
+shouldBe("(-0).toString()", '"0"');
+debug("");
+
+var answers = [
+['"-128"', '"-129"', '"127"', '"128"'],
+['"-256"', '"-257"', '"255"', '"256"'],
+['"-512"', '"-513"', '"511"', '"512"'],
+['"-1024"', '"-1025"', '"1023"', '"1024"'],
+['"-2048"', '"-2049"', '"2047"', '"2048"'],
+['"-4096"', '"-4097"', '"4095"', '"4096"'],
+['"-8192"', '"-8193"', '"8191"', '"8192"'],
+['"-16384"', '"-16385"', '"16383"', '"16384"'],
+['"-32768"', '"-32769"', '"32767"', '"32768"'],
+['"-65536"', '"-65537"', '"65535"', '"65536"'],
+['"-131072"', '"-131073"', '"131071"', '"131072"'],
+['"-262144"', '"-262145"', '"262143"', '"262144"'],
+['"-524288"', '"-524289"', '"524287"', '"524288"'],
+['"-1048576"', '"-1048577"', '"1048575"', '"1048576"'],
+['"-2097152"', '"-2097153"', '"2097151"', '"2097152"'],
+['"-4194304"', '"-4194305"', '"4194303"', '"4194304"'],
+['"-8388608"', '"-8388609"', '"8388607"', '"8388608"'],
+['"-16777216"', '"-16777217"', '"16777215"', '"16777216"'],
+['"-33554432"', '"-33554433"', '"33554431"', '"33554432"'],
+['"-67108864"', '"-67108865"', '"67108863"', '"67108864"'],
+['"-134217728"', '"-134217729"', '"134217727"', '"134217728"'],
+['"-268435456"', '"-268435457"', '"268435455"', '"268435456"'],
+['"-536870912"', '"-536870913"', '"536870911"', '"536870912"'],
+['"-1073741824"', '"-1073741825"', '"1073741823"', '"1073741824"'],
+['"-2147483648"', '"-2147483649"', '"2147483647"', '"2147483648"'],
+['"-4294967296"', '"-4294967297"', '"4294967295"', '"4294967296"'],
+['"-8589934592"', '"-8589934593"', '"8589934591"', '"8589934592"'],
+['"-17179869184"', '"-17179869185"', '"17179869183"', '"17179869184"'],
+['"-34359738368"', '"-34359738369"', '"34359738367"', '"34359738368"'],
+['"-68719476736"', '"-68719476737"', '"68719476735"', '"68719476736"'],
+['"-137438953472"', '"-137438953473"', '"137438953471"', '"137438953472"'],
+['"-274877906944"', '"-274877906945"', '"274877906943"', '"274877906944"'],
+['"-549755813888"', '"-549755813889"', '"549755813887"', '"549755813888"'],
+['"-1099511627776"', '"-1099511627777"', '"1099511627775"', '"1099511627776"'],
+['"-2199023255552"', '"-2199023255553"', '"2199023255551"', '"2199023255552"'],
+['"-4398046511104"', '"-4398046511105"', '"4398046511103"', '"4398046511104"'],
+['"-8796093022208"', '"-8796093022209"', '"8796093022207"', '"8796093022208"'],
+['"-17592186044416"', '"-17592186044417"', '"17592186044415"', '"17592186044416"'],
+['"-35184372088832"', '"-35184372088833"', '"35184372088831"', '"35184372088832"'],
+['"-70368744177664"', '"-70368744177665"', '"70368744177663"', '"70368744177664"'],
+['"-140737488355328"', '"-140737488355329"', '"140737488355327"', '"140737488355328"'],
+['"-281474976710656"', '"-281474976710657"', '"281474976710655"', '"281474976710656"'],
+['"-562949953421312"', '"-562949953421313"', '"562949953421311"', '"562949953421312"'],
+['"-1125899906842624"', '"-1125899906842625"', '"1125899906842623"', '"1125899906842624"'],
+['"-2251799813685248"', '"-2251799813685249"', '"2251799813685247"', '"2251799813685248"'],
+['"-4503599627370496"', '"-4503599627370497"', '"4503599627370495"', '"4503599627370496"'],
+['"-9007199254740992"', '"-9007199254740992"', '"9007199254740991"', '"9007199254740992"'],
+['"-18014398509481984"', '"-18014398509481984"', '"18014398509481984"', '"18014398509481984"'],
+['"-36028797018963970"', '"-36028797018963970"', '"36028797018963970"', '"36028797018963970"'],
+['"-72057594037927940"', '"-72057594037927940"', '"72057594037927940"', '"72057594037927940"'],
+['"-144115188075855870"', '"-144115188075855870"', '"144115188075855870"', '"144115188075855870"'],
+['"-288230376151711740"', '"-288230376151711740"', '"288230376151711740"', '"288230376151711740"'],
+['"-576460752303423500"', '"-576460752303423500"', '"576460752303423500"', '"576460752303423500"'],
+['"-1152921504606847000"', '"-1152921504606847000"', '"1152921504606847000"', '"1152921504606847000"'],
+['"-2305843009213694000"', '"-2305843009213694000"', '"2305843009213694000"', '"2305843009213694000"'],
+['"-4611686018427388000"', '"-4611686018427388000"', '"4611686018427388000"', '"4611686018427388000"'],
+['"-9223372036854776000"', '"-9223372036854776000"', '"9223372036854776000"', '"9223372036854776000"'],
+['"-18446744073709552000"', '"-18446744073709552000"', '"18446744073709552000"', '"18446744073709552000"'],
+['"-36893488147419103000"', '"-36893488147419103000"', '"36893488147419103000"', '"36893488147419103000"'],
+['"-73786976294838210000"', '"-73786976294838210000"', '"73786976294838210000"', '"73786976294838210000"'],
+['"-147573952589676410000"', '"-147573952589676410000"', '"147573952589676410000"', '"147573952589676410000"'],
+['"-295147905179352830000"', '"-295147905179352830000"', '"295147905179352830000"', '"295147905179352830000"'],
+['"-590295810358705700000"', '"-590295810358705700000"', '"590295810358705700000"', '"590295810358705700000"'],
+['"-1.1805916207174113e+21"', '"-1.1805916207174113e+21"', '"1.1805916207174113e+21"', '"1.1805916207174113e+21"'],
+['"-2.3611832414348226e+21"', '"-2.3611832414348226e+21"', '"2.3611832414348226e+21"', '"2.3611832414348226e+21"'],
+['"-4.722366482869645e+21"', '"-4.722366482869645e+21"', '"4.722366482869645e+21"', '"4.722366482869645e+21"'],
+['"-9.44473296573929e+21"', '"-9.44473296573929e+21"', '"9.44473296573929e+21"', '"9.44473296573929e+21"'],
+['"-1.888946593147858e+22"', '"-1.888946593147858e+22"', '"1.888946593147858e+22"', '"1.888946593147858e+22"'],
+['"-3.777893186295716e+22"', '"-3.777893186295716e+22"', '"3.777893186295716e+22"', '"3.777893186295716e+22"'],
+['"-7.555786372591432e+22"', '"-7.555786372591432e+22"', '"7.555786372591432e+22"', '"7.555786372591432e+22"'],
+['"-1.5111572745182865e+23"', '"-1.5111572745182865e+23"', '"1.5111572745182865e+23"', '"1.5111572745182865e+23"'],
+['"-3.022314549036573e+23"', '"-3.022314549036573e+23"', '"3.022314549036573e+23"', '"3.022314549036573e+23"'],
+['"-6.044629098073146e+23"', '"-6.044629098073146e+23"', '"6.044629098073146e+23"', '"6.044629098073146e+23"'],
+['"-1.2089258196146292e+24"', '"-1.2089258196146292e+24"', '"1.2089258196146292e+24"', '"1.2089258196146292e+24"'],
+['"-2.4178516392292583e+24"', '"-2.4178516392292583e+24"', '"2.4178516392292583e+24"', '"2.4178516392292583e+24"'],
+['"-4.835703278458517e+24"', '"-4.835703278458517e+24"', '"4.835703278458517e+24"', '"4.835703278458517e+24"'],
+['"-9.671406556917033e+24"', '"-9.671406556917033e+24"', '"9.671406556917033e+24"', '"9.671406556917033e+24"'],
+['"-1.9342813113834067e+25"', '"-1.9342813113834067e+25"', '"1.9342813113834067e+25"', '"1.9342813113834067e+25"'],
+['"-3.8685626227668134e+25"', '"-3.8685626227668134e+25"', '"3.8685626227668134e+25"', '"3.8685626227668134e+25"'],
+['"-7.737125245533627e+25"', '"-7.737125245533627e+25"', '"7.737125245533627e+25"', '"7.737125245533627e+25"'],
+['"-1.5474250491067253e+26"', '"-1.5474250491067253e+26"', '"1.5474250491067253e+26"', '"1.5474250491067253e+26"'],
+['"-3.094850098213451e+26"', '"-3.094850098213451e+26"', '"3.094850098213451e+26"', '"3.094850098213451e+26"'],
+['"-6.189700196426902e+26"', '"-6.189700196426902e+26"', '"6.189700196426902e+26"', '"6.189700196426902e+26"'],
+['"-1.2379400392853803e+27"', '"-1.2379400392853803e+27"', '"1.2379400392853803e+27"', '"1.2379400392853803e+27"'],
+['"-2.4758800785707605e+27"', '"-2.4758800785707605e+27"', '"2.4758800785707605e+27"', '"2.4758800785707605e+27"'],
+['"-4.951760157141521e+27"', '"-4.951760157141521e+27"', '"4.951760157141521e+27"', '"4.951760157141521e+27"'],
+['"-9.903520314283042e+27"', '"-9.903520314283042e+27"', '"9.903520314283042e+27"', '"9.903520314283042e+27"'],
+['"-1.9807040628566084e+28"', '"-1.9807040628566084e+28"', '"1.9807040628566084e+28"', '"1.9807040628566084e+28"'],
+['"-3.961408125713217e+28"', '"-3.961408125713217e+28"', '"3.961408125713217e+28"', '"3.961408125713217e+28"'],
+['"-7.922816251426434e+28"', '"-7.922816251426434e+28"', '"7.922816251426434e+28"', '"7.922816251426434e+28"'],
+['"-1.5845632502852868e+29"', '"-1.5845632502852868e+29"', '"1.5845632502852868e+29"', '"1.5845632502852868e+29"'],
+['"-3.1691265005705735e+29"', '"-3.1691265005705735e+29"', '"3.1691265005705735e+29"', '"3.1691265005705735e+29"'],
+['"-6.338253001141147e+29"', '"-6.338253001141147e+29"', '"6.338253001141147e+29"', '"6.338253001141147e+29"'],
+['"-1.2676506002282294e+30"', '"-1.2676506002282294e+30"', '"1.2676506002282294e+30"', '"1.2676506002282294e+30"'],
+['"-2.535301200456459e+30"', '"-2.535301200456459e+30"', '"2.535301200456459e+30"', '"2.535301200456459e+30"'],
+['"-5.070602400912918e+30"', '"-5.070602400912918e+30"', '"5.070602400912918e+30"', '"5.070602400912918e+30"'],
+['"-1.0141204801825835e+31"', '"-1.0141204801825835e+31"', '"1.0141204801825835e+31"', '"1.0141204801825835e+31"'],
+['"-2.028240960365167e+31"', '"-2.028240960365167e+31"', '"2.028240960365167e+31"', '"2.028240960365167e+31"'],
+['"-4.056481920730334e+31"', '"-4.056481920730334e+31"', '"4.056481920730334e+31"', '"4.056481920730334e+31"'],
+['"-8.112963841460668e+31"', '"-8.112963841460668e+31"', '"8.112963841460668e+31"', '"8.112963841460668e+31"'],
+['"-1.6225927682921336e+32"', '"-1.6225927682921336e+32"', '"1.6225927682921336e+32"', '"1.6225927682921336e+32"'],
+['"-3.2451855365842673e+32"', '"-3.2451855365842673e+32"', '"3.2451855365842673e+32"', '"3.2451855365842673e+32"'],
+['"-6.490371073168535e+32"', '"-6.490371073168535e+32"', '"6.490371073168535e+32"', '"6.490371073168535e+32"'],
+['"-1.298074214633707e+33"', '"-1.298074214633707e+33"', '"1.298074214633707e+33"', '"1.298074214633707e+33"'],
+['"-2.596148429267414e+33"', '"-2.596148429267414e+33"', '"2.596148429267414e+33"', '"2.596148429267414e+33"'],
+['"-5.192296858534828e+33"', '"-5.192296858534828e+33"', '"5.192296858534828e+33"', '"5.192296858534828e+33"'],
+['"-1.0384593717069655e+34"', '"-1.0384593717069655e+34"', '"1.0384593717069655e+34"', '"1.0384593717069655e+34"'],
+['"-2.076918743413931e+34"', '"-2.076918743413931e+34"', '"2.076918743413931e+34"', '"2.076918743413931e+34"'],
+['"-4.153837486827862e+34"', '"-4.153837486827862e+34"', '"4.153837486827862e+34"', '"4.153837486827862e+34"'],
+['"-8.307674973655724e+34"', '"-8.307674973655724e+34"', '"8.307674973655724e+34"', '"8.307674973655724e+34"'],
+['"-1.661534994731145e+35"', '"-1.661534994731145e+35"', '"1.661534994731145e+35"', '"1.661534994731145e+35"'],
+['"-3.32306998946229e+35"', '"-3.32306998946229e+35"', '"3.32306998946229e+35"', '"3.32306998946229e+35"'],
+['"-6.64613997892458e+35"', '"-6.64613997892458e+35"', '"6.64613997892458e+35"', '"6.64613997892458e+35"'],
+['"-1.329227995784916e+36"', '"-1.329227995784916e+36"', '"1.329227995784916e+36"', '"1.329227995784916e+36"'],
+['"-2.658455991569832e+36"', '"-2.658455991569832e+36"', '"2.658455991569832e+36"', '"2.658455991569832e+36"'],
+['"-5.316911983139664e+36"', '"-5.316911983139664e+36"', '"5.316911983139664e+36"', '"5.316911983139664e+36"'],
+['"-1.0633823966279327e+37"', '"-1.0633823966279327e+37"', '"1.0633823966279327e+37"', '"1.0633823966279327e+37"'],
+['"-2.1267647932558654e+37"', '"-2.1267647932558654e+37"', '"2.1267647932558654e+37"', '"2.1267647932558654e+37"'],
+['"-4.253529586511731e+37"', '"-4.253529586511731e+37"', '"4.253529586511731e+37"', '"4.253529586511731e+37"'],
+['"-8.507059173023462e+37"', '"-8.507059173023462e+37"', '"8.507059173023462e+37"', '"8.507059173023462e+37"'],
+['"-1.7014118346046923e+38"', '"-1.7014118346046923e+38"', '"1.7014118346046923e+38"', '"1.7014118346046923e+38"']
+];
+
+for (var valueBits = 8; valueBits <= 128; valueBits++) {
+    debug("bits used to store value: " + valueBits);
+    var max = Math.pow(2, valueBits - 1) - 1;
+    var min = -Math.pow(2, valueBits - 1);
+    shouldBe("min.toString()", answers[valueBits-8][0]);
+    shouldBe("(min - 1).toString()", answers[valueBits-8][1]);
+    shouldBe("max.toString()", answers[valueBits-8][2]);
+    shouldBe("(max + 1).toString()", answers[valueBits-8][3]);
+}
diff --git a/test/webkit/interpreter-no-activation-expected.txt b/test/webkit/interpreter-no-activation-expected.txt
new file mode 100644 (file)
index 0000000..aebc900
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Make sure arguments tearoff works correctly when a functions activation has not been created.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS f1(false) is true
+PASS f2(true) is true
+PASS Didn't crash
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/interpreter-no-activation.js b/test/webkit/interpreter-no-activation.js
new file mode 100644 (file)
index 0000000..cec2276
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Make sure arguments tearoff works correctly when a functions activation has not been created.");
+
+function f1(a,b,c,d) {
+    if (0) (function (){ a; });
+    a = true;
+    return arguments[0];
+}
+shouldBeTrue("f1(false)");
+
+function f2(a,b,c,d) {
+    "use strict";
+    a = false;
+    if (0) (function (){ a; });
+    return arguments[0];
+}
+shouldBeTrue("f2(true)");
+testPassed("Didn't crash");
diff --git a/test/webkit/invalid-callframe-during-unwind-expected.txt b/test/webkit/invalid-callframe-during-unwind-expected.txt
new file mode 100644 (file)
index 0000000..2097abc
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure we have a valid callframe midway through unwinding
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS testUnwind() threw exception threw successfully.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/invalid-callframe-during-unwind.js b/test/webkit/invalid-callframe-during-unwind.js
new file mode 100644 (file)
index 0000000..c507896
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure we have a valid callframe midway through unwinding");
+
+function testUnwind(){with({}){ arguments; throw "threw successfully";}}
+
+shouldThrow("testUnwind()")
diff --git a/test/webkit/isPrototypeOf-expected.txt b/test/webkit/isPrototypeOf-expected.txt
new file mode 100644 (file)
index 0000000..9ab1fbb
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that isPrototypeOf works according to the ECMA spec.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Object.isPrototypeOf('string') is false
+PASS Array.prototype.isPrototypeOf(new Array()) is true
+PASS ObjectA.prototype.isPrototypeOf(objb) is true
+PASS ObjectA.prototype.isPrototypeOf(objc) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/isPrototypeOf.js b/test/webkit/isPrototypeOf.js
new file mode 100644 (file)
index 0000000..6cbc8c8
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that isPrototypeOf works according to the ECMA spec."
+);
+
+shouldBeFalse("Object.isPrototypeOf('string')");
+shouldBeTrue("Array.prototype.isPrototypeOf(new Array())");
+
+function ObjectA() { }
+function ObjectB() { }
+ObjectB.prototype = new ObjectA();
+var objb = new ObjectB();
+shouldBeTrue("ObjectA.prototype.isPrototypeOf(objb)");
+
+function ObjectC() {}
+ObjectC.prototype = new ObjectB();
+var objc = new ObjectC();
+shouldBeTrue("ObjectA.prototype.isPrototypeOf(objc)");
diff --git a/test/webkit/jit-float32-array-nan-expected.txt b/test/webkit/jit-float32-array-nan-expected.txt
new file mode 100644 (file)
index 0000000..f65d714
--- /dev/null
@@ -0,0 +1,234 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what happens in the Baseline JIT if we load from a Float32 array that contains a weirdly formatted NaN.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+-4587521
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+NaN
+PASS "" + floatView[0] is "NaN"
+I didn't crash, which is a good thing.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/jit-float32-array-nan.js b/test/webkit/jit-float32-array-nan.js
new file mode 100644 (file)
index 0000000..369fa20
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what happens in the Baseline JIT if we load from a Float32 array that contains a weirdly formatted NaN."
+);
+
+var buffer = new ArrayBuffer(4);
+
+var int32View = new Int32Array(buffer);
+var floatView = new Float32Array(buffer);
+
+int32View[0] = -4587521;
+
+debug(int32View[0]);
+
+for (var i = 0; i < 100; ++i) {
+    debug(floatView[0]);
+    shouldBe("\"\" + floatView[0]", "\"NaN\"");
+}
+
+debug("I didn't crash, which is a good thing.");
diff --git a/test/webkit/js-continue-break-restrictions-expected.txt b/test/webkit/js-continue-break-restrictions-expected.txt
new file mode 100644 (file)
index 0000000..74b1726
--- /dev/null
@@ -0,0 +1,60 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Verify that invalid continue and break statements are handled correctly
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS L:{true;break L;false} is true
+PASS if (0) { L:{ break; } } threw exception SyntaxError: Illegal break statement.
+PASS if (0) { L:{ continue L; } } threw exception SyntaxError: Undefined label 'L'.
+PASS if (0) { L:{ continue; } } threw exception SyntaxError: Illegal continue statement.
+PASS if (0) { switch (1) { case 1: continue; } } threw exception SyntaxError: Illegal continue statement.
+PASS A:L:{true;break L;false} is true
+PASS if (0) { A:L:{ break; } } threw exception SyntaxError: Illegal break statement.
+PASS if (0) { A:L:{ continue L; } } threw exception SyntaxError: Undefined label 'L'.
+PASS if (0) { A:L:{ continue; } } threw exception SyntaxError: Illegal continue statement.
+PASS L:A:{true;break L;false} is true
+PASS if (0) { L:A:{ break; } } threw exception SyntaxError: Illegal break statement.
+PASS if (0) { L:A:{ continue L; } } threw exception SyntaxError: Undefined label 'L'.
+PASS if (0) { L:A:{ continue; } } threw exception SyntaxError: Illegal continue statement.
+PASS if(0){ L:for(;;) continue L; } is undefined.
+PASS if(0){ L:A:for(;;) continue L; } is undefined.
+PASS if(0){ A:L:for(;;) continue L; } is undefined.
+PASS if(0){ A:for(;;) L:continue L; } threw exception SyntaxError: Undefined label 'L'.
+PASS if(0){ L:for(;;) A:continue L; } is undefined.
+PASS if(0){ L:do continue L; while(0); } is undefined.
+PASS if(0){ L:A:do continue L; while(0); } is undefined.
+PASS if(0){ A:L:do continue L; while(0);} is undefined.
+PASS if(0){ A:do L:continue L; while(0); } threw exception SyntaxError: Undefined label 'L'.
+PASS if(0){ L:do A:continue L; while(0); } is undefined.
+PASS if(0){ L:while(0) continue L; } is undefined.
+PASS if(0){ L:A:while(0) continue L; } is undefined.
+PASS if(0){ A:L:while(0) continue L; } is undefined.
+PASS if(0){ A:while(0) L:continue L; } threw exception SyntaxError: Undefined label 'L'.
+PASS if(0){ L:while(0) A:continue L; } is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/js-continue-break-restrictions.js b/test/webkit/js-continue-break-restrictions.js
new file mode 100644 (file)
index 0000000..18b60b9
--- /dev/null
@@ -0,0 +1,58 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Verify that invalid continue and break statements are handled correctly");
+
+shouldBeTrue("L:{true;break L;false}");
+shouldThrow("if (0) { L:{ break; } }");
+shouldThrow("if (0) { L:{ continue L; } }");
+shouldThrow("if (0) { L:{ continue; } }");
+shouldThrow("if (0) { switch (1) { case 1: continue; } }");
+shouldBeTrue("A:L:{true;break L;false}");
+shouldThrow("if (0) { A:L:{ break; } }");
+shouldThrow("if (0) { A:L:{ continue L; } }");
+shouldThrow("if (0) { A:L:{ continue; } }");
+
+shouldBeTrue("L:A:{true;break L;false}");
+shouldThrow("if (0) { L:A:{ break; } }");
+shouldThrow("if (0) { L:A:{ continue L; } }");
+shouldThrow("if (0) { L:A:{ continue; } }");
+
+shouldBeUndefined("if(0){ L:for(;;) continue L; }")
+shouldBeUndefined("if(0){ L:A:for(;;) continue L; }")
+shouldBeUndefined("if(0){ A:L:for(;;) continue L; }")
+shouldThrow("if(0){ A:for(;;) L:continue L; }")
+shouldBeUndefined("if(0){ L:for(;;) A:continue L; }")
+
+shouldBeUndefined("if(0){ L:do continue L; while(0); }")
+shouldBeUndefined("if(0){ L:A:do continue L; while(0); }")
+shouldBeUndefined("if(0){ A:L:do continue L; while(0);}")
+shouldThrow("if(0){ A:do L:continue L; while(0); }")
+shouldBeUndefined("if(0){ L:do A:continue L; while(0); }")
+
+
+shouldBeUndefined("if(0){ L:while(0) continue L; }")
+shouldBeUndefined("if(0){ L:A:while(0) continue L; }")
+shouldBeUndefined("if(0){ A:L:while(0) continue L; }")
+shouldThrow("if(0){ A:while(0) L:continue L; }")
+shouldBeUndefined("if(0){ L:while(0) A:continue L; }")
diff --git a/test/webkit/keywords-and-reserved_words-expected.txt b/test/webkit/keywords-and-reserved_words-expected.txt
new file mode 100644 (file)
index 0000000..7d70ec9
--- /dev/null
@@ -0,0 +1,96 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test verifies that keywords and reserved words match those specified in ES5 section 7.6.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS classifyIdentifier("x") is "identifier"
+PASS classifyIdentifier("id") is "identifier"
+PASS classifyIdentifier("identifier") is "identifier"
+PASS classifyIdentifier("keyword") is "identifier"
+PASS classifyIdentifier("strict") is "identifier"
+PASS classifyIdentifier("use") is "identifier"
+PASS classifyIdentifier("abstract") is "identifier"
+PASS classifyIdentifier("boolean") is "identifier"
+PASS classifyIdentifier("byte") is "identifier"
+PASS classifyIdentifier("char") is "identifier"
+PASS classifyIdentifier("double") is "identifier"
+PASS classifyIdentifier("final") is "identifier"
+PASS classifyIdentifier("float") is "identifier"
+PASS classifyIdentifier("goto") is "identifier"
+PASS classifyIdentifier("int") is "identifier"
+PASS classifyIdentifier("long") is "identifier"
+PASS classifyIdentifier("native") is "identifier"
+PASS classifyIdentifier("short") is "identifier"
+PASS classifyIdentifier("synchronized") is "identifier"
+PASS classifyIdentifier("throws") is "identifier"
+PASS classifyIdentifier("transient") is "identifier"
+PASS classifyIdentifier("volatile") is "identifier"
+PASS classifyIdentifier("break") is "keyword"
+PASS classifyIdentifier("case") is "keyword"
+PASS classifyIdentifier("catch") is "keyword"
+PASS classifyIdentifier("continue") is "keyword"
+PASS classifyIdentifier("debugger") is "keyword"
+PASS classifyIdentifier("default") is "keyword"
+PASS classifyIdentifier("delete") is "keyword"
+PASS classifyIdentifier("do") is "keyword"
+PASS classifyIdentifier("else") is "keyword"
+PASS classifyIdentifier("finally") is "keyword"
+PASS classifyIdentifier("for") is "keyword"
+PASS classifyIdentifier("function") is "keyword"
+PASS classifyIdentifier("if") is "keyword"
+PASS classifyIdentifier("in") is "keyword"
+PASS classifyIdentifier("instanceof") is "keyword"
+PASS classifyIdentifier("new") is "keyword"
+PASS classifyIdentifier("return") is "keyword"
+PASS classifyIdentifier("switch") is "keyword"
+PASS classifyIdentifier("this") is "keyword"
+PASS classifyIdentifier("throw") is "keyword"
+PASS classifyIdentifier("try") is "keyword"
+PASS classifyIdentifier("typeof") is "keyword"
+PASS classifyIdentifier("var") is "keyword"
+PASS classifyIdentifier("void") is "keyword"
+PASS classifyIdentifier("while") is "keyword"
+PASS classifyIdentifier("with") is "keyword"
+PASS classifyIdentifier("class") is "keyword"
+PASS classifyIdentifier("const") is "keyword"
+PASS classifyIdentifier("enum") is "keyword"
+PASS classifyIdentifier("export") is "keyword"
+PASS classifyIdentifier("extends") is "keyword"
+PASS classifyIdentifier("import") is "keyword"
+PASS classifyIdentifier("super") is "keyword"
+PASS classifyIdentifier("implements") is "strict"
+PASS classifyIdentifier("interface") is "strict"
+PASS classifyIdentifier("let") is "strict"
+PASS classifyIdentifier("package") is "strict"
+PASS classifyIdentifier("private") is "strict"
+PASS classifyIdentifier("protected") is "strict"
+PASS classifyIdentifier("public") is "strict"
+PASS classifyIdentifier("static") is "strict"
+PASS classifyIdentifier("yield") is "strict"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/keywords-and-reserved_words.js b/test/webkit/keywords-and-reserved_words.js
new file mode 100644 (file)
index 0000000..d57102f
--- /dev/null
@@ -0,0 +1,136 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test verifies that keywords and reserved words match those specified in ES5 section 7.6."
+);
+
+function isKeyword(x)
+{
+    try {
+        eval("var "+x+";");
+    } catch(e) {
+        return true;
+    }
+
+    return false;
+}
+
+function isStrictKeyword(x)
+{
+    try {
+        eval("'use strict'; var "+x+";");
+    } catch(e) {
+        return true;
+    }
+
+    return false;
+}
+
+function classifyIdentifier(x)
+{
+    if (isKeyword(x)) {
+        // All non-strict keywords are also keywords in strict code.
+        if (!isStrictKeyword(x))
+            return "ERROR";
+        return "keyword";
+    }
+
+    // Check for strict mode future reserved words.
+    if (isStrictKeyword(x))
+        return "strict";
+
+    return "identifier";
+}
+
+// Not keywords - these are all just identifiers.
+shouldBe('classifyIdentifier("x")', '"identifier"');
+shouldBe('classifyIdentifier("id")', '"identifier"');
+shouldBe('classifyIdentifier("identifier")', '"identifier"');
+shouldBe('classifyIdentifier("keyword")', '"identifier"');
+shouldBe('classifyIdentifier("strict")', '"identifier"');
+shouldBe('classifyIdentifier("use")', '"identifier"');
+// These are identifiers that we used to treat as keywords!
+shouldBe('classifyIdentifier("abstract")', '"identifier"');
+shouldBe('classifyIdentifier("boolean")', '"identifier"');
+shouldBe('classifyIdentifier("byte")', '"identifier"');
+shouldBe('classifyIdentifier("char")', '"identifier"');
+shouldBe('classifyIdentifier("double")', '"identifier"');
+shouldBe('classifyIdentifier("final")', '"identifier"');
+shouldBe('classifyIdentifier("float")', '"identifier"');
+shouldBe('classifyIdentifier("goto")', '"identifier"');
+shouldBe('classifyIdentifier("int")', '"identifier"');
+shouldBe('classifyIdentifier("long")', '"identifier"');
+shouldBe('classifyIdentifier("native")', '"identifier"');
+shouldBe('classifyIdentifier("short")', '"identifier"');
+shouldBe('classifyIdentifier("synchronized")', '"identifier"');
+shouldBe('classifyIdentifier("throws")', '"identifier"');
+shouldBe('classifyIdentifier("transient")', '"identifier"');
+shouldBe('classifyIdentifier("volatile")', '"identifier"');
+
+// Keywords.
+shouldBe('classifyIdentifier("break")', '"keyword"');
+shouldBe('classifyIdentifier("case")', '"keyword"');
+shouldBe('classifyIdentifier("catch")', '"keyword"');
+shouldBe('classifyIdentifier("continue")', '"keyword"');
+shouldBe('classifyIdentifier("debugger")', '"keyword"');
+shouldBe('classifyIdentifier("default")', '"keyword"');
+shouldBe('classifyIdentifier("delete")', '"keyword"');
+shouldBe('classifyIdentifier("do")', '"keyword"');
+shouldBe('classifyIdentifier("else")', '"keyword"');
+shouldBe('classifyIdentifier("finally")', '"keyword"');
+shouldBe('classifyIdentifier("for")', '"keyword"');
+shouldBe('classifyIdentifier("function")', '"keyword"');
+shouldBe('classifyIdentifier("if")', '"keyword"');
+shouldBe('classifyIdentifier("in")', '"keyword"');
+shouldBe('classifyIdentifier("instanceof")', '"keyword"');
+shouldBe('classifyIdentifier("new")', '"keyword"');
+shouldBe('classifyIdentifier("return")', '"keyword"');
+shouldBe('classifyIdentifier("switch")', '"keyword"');
+shouldBe('classifyIdentifier("this")', '"keyword"');
+shouldBe('classifyIdentifier("throw")', '"keyword"');
+shouldBe('classifyIdentifier("try")', '"keyword"');
+shouldBe('classifyIdentifier("typeof")', '"keyword"');
+shouldBe('classifyIdentifier("var")', '"keyword"');
+shouldBe('classifyIdentifier("void")', '"keyword"');
+shouldBe('classifyIdentifier("while")', '"keyword"');
+shouldBe('classifyIdentifier("with")', '"keyword"');
+// Technically these are "Future Reserved Words"!
+shouldBe('classifyIdentifier("class")', '"keyword"');
+shouldBe('classifyIdentifier("const")', '"keyword"');
+shouldBe('classifyIdentifier("enum")', '"keyword"');
+shouldBe('classifyIdentifier("export")', '"keyword"');
+shouldBe('classifyIdentifier("extends")', '"keyword"');
+shouldBe('classifyIdentifier("import")', '"keyword"');
+shouldBe('classifyIdentifier("super")', '"keyword"');
+
+// Future Reserved Words, in strict mode only.
+shouldBe('classifyIdentifier("implements")', '"strict"');
+shouldBe('classifyIdentifier("interface")', '"strict"');
+shouldBe('classifyIdentifier("let")', '"strict"');
+shouldBe('classifyIdentifier("package")', '"strict"');
+shouldBe('classifyIdentifier("private")', '"strict"');
+shouldBe('classifyIdentifier("protected")', '"strict"');
+shouldBe('classifyIdentifier("public")', '"strict"');
+shouldBe('classifyIdentifier("static")', '"strict"');
+shouldBe('classifyIdentifier("yield")', '"strict"');
diff --git a/test/webkit/legitimately-captured-argument-expected.txt b/test/webkit/legitimately-captured-argument-expected.txt
new file mode 100644 (file)
index 0000000..0231b58
--- /dev/null
@@ -0,0 +1,1032 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that using an argument as a captured variable, in the legitimate sense rather than the function.arguments sense, works as expected.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS counter() is 1
+PASS counter() is 2
+PASS counter() is 3
+PASS counter() is 4
+PASS counter() is 5
+PASS counter() is 6
+PASS counter() is 7
+PASS counter() is 8
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 2
+PASS counter() is 3
+PASS counter() is 4
+PASS counter() is 5
+PASS counter() is 6
+PASS counter() is 7
+PASS counter() is 8
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 3
+PASS counter() is 4
+PASS counter() is 5
+PASS counter() is 6
+PASS counter() is 7
+PASS counter() is 8
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 4
+PASS counter() is 5
+PASS counter() is 6
+PASS counter() is 7
+PASS counter() is 8
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 5
+PASS counter() is 6
+PASS counter() is 7
+PASS counter() is 8
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 6
+PASS counter() is 7
+PASS counter() is 8
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 7
+PASS counter() is 8
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 8
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 9
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 10
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 11
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 12
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 13
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 14
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 15
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 16
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 17
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 18
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 19
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 20
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 21
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 22
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 23
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 24
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 25
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 26
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 27
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 28
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 29
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 30
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 31
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 32
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 33
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 34
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 35
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 36
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 37
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 38
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 39
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 40
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 41
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 42
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 43
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 44
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 45
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 46
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 47
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 48
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 49
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 50
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 51
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 52
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 53
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 54
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 55
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 56
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 57
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 58
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 59
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 60
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 61
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 62
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 63
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 64
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 65
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 66
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 67
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 68
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 69
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 70
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 71
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 72
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 73
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 74
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 75
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 76
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 77
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 78
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 79
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 80
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 81
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 82
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 83
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 84
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 85
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 86
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 87
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 88
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 89
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 90
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 91
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 92
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 93
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 102
+PASS counter() is 94
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 102
+PASS counter() is 103
+PASS counter() is 95
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 102
+PASS counter() is 103
+PASS counter() is 104
+PASS counter() is 96
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 102
+PASS counter() is 103
+PASS counter() is 104
+PASS counter() is 105
+PASS counter() is 97
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 102
+PASS counter() is 103
+PASS counter() is 104
+PASS counter() is 105
+PASS counter() is 106
+PASS counter() is 98
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 102
+PASS counter() is 103
+PASS counter() is 104
+PASS counter() is 105
+PASS counter() is 106
+PASS counter() is 107
+PASS counter() is 99
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 102
+PASS counter() is 103
+PASS counter() is 104
+PASS counter() is 105
+PASS counter() is 106
+PASS counter() is 107
+PASS counter() is 108
+PASS counter() is 100
+PASS counter() is 101
+PASS counter() is 102
+PASS counter() is 103
+PASS counter() is 104
+PASS counter() is 105
+PASS counter() is 106
+PASS counter() is 107
+PASS counter() is 108
+PASS counter() is 109
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/legitimately-captured-argument.js b/test/webkit/legitimately-captured-argument.js
new file mode 100644 (file)
index 0000000..a7290e5
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that using an argument as a captured variable, in the legitimate sense rather than the function.arguments sense, works as expected."
+);
+
+function makeCounter(x) {
+    return function() {
+        return ++x;
+    };
+}
+
+for (var i = 0; i < 100; ++i) {
+    var counter = makeCounter(i);
+    for (var j = 0; j < 10; ++j)
+        shouldBe("counter()", "" + (i + j + 1));
+}
diff --git a/test/webkit/logical-or-jless-expected.txt b/test/webkit/logical-or-jless-expected.txt
new file mode 100644 (file)
index 0000000..983a51c
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks whether the pair of opcodes (less, jtrue) is incorrectly optimized in a LogicalOrNode.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/logical-or-jless.js b/test/webkit/logical-or-jless.js
new file mode 100644 (file)
index 0000000..458c06f
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks whether the pair of opcodes (less, jtrue) is incorrectly optimized in a LogicalOrNode."
+);
+
+var failMessage = "FAIL";
+var temp = failMessage || failMessage;
+var result = 1 < 2 || false;
+shouldBeTrue("result");
diff --git a/test/webkit/math-expected.txt b/test/webkit/math-expected.txt
new file mode 100644 (file)
index 0000000..6b520f9
--- /dev/null
@@ -0,0 +1,194 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the behavior of the Math object as described in 15.8 of the language specification.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Math.abs(NaN) is NaN
+PASS Math.abs(0) is 0
+PASS Math.abs(-0) is 0
+PASS Math.abs(1) is 1
+PASS Math.abs(-1) is 1
+PASS Math.abs(Number.MIN_VALUE) is Number.MIN_VALUE
+PASS Math.abs(-Number.MIN_VALUE) is Number.MIN_VALUE
+PASS Math.abs(Number.MAX_VALUE) is Number.MAX_VALUE
+PASS Math.abs(-Number.MAX_VALUE) is Number.MAX_VALUE
+PASS Math.abs(Infinity) is Infinity
+PASS Math.abs(-Infinity) is Infinity
+PASS Math.acos(NaN) is NaN
+PASS Math.acos(-0) is Math.acos(0)
+PASS Math.acos(1) is 0
+PASS Math.acos(1.1) is NaN
+PASS Math.acos(-1.1) is NaN
+PASS Math.acos(Infinity) is NaN
+PASS Math.acos(-Infinity) is NaN
+PASS Math.asin(NaN) is NaN
+PASS Math.asin(0) is 0
+PASS Math.asin(-0) is -0
+PASS Math.asin(1) is -Math.asin(-1)
+PASS Math.asin(1.1) is NaN
+PASS Math.asin(-1.1) is NaN
+PASS Math.asin(Infinity) is NaN
+PASS Math.asin(-Infinity) is NaN
+PASS Math.atan(NaN) is NaN
+PASS Math.atan(0) is 0
+PASS Math.atan(-0) is -0
+PASS Math.atan(Infinity) is -Math.atan(-Infinity)
+PASS Math.atan2(NaN, NaN) is NaN
+PASS Math.atan2(NaN, 0) is NaN
+PASS Math.atan2(NaN, -0) is NaN
+PASS Math.atan2(NaN, 1) is NaN
+PASS Math.atan2(NaN, Infinity) is NaN
+PASS Math.atan2(NaN, -Infinity) is NaN
+PASS Math.atan2(0, NaN) is NaN
+PASS Math.atan2(-0, NaN) is NaN
+PASS Math.atan2(1, NaN) is NaN
+PASS Math.atan2(Infinity, NaN) is NaN
+PASS Math.atan2(-Infinity, NaN) is NaN
+PASS testStr is "onetwo"
+PASS Math.ceil(NaN) is NaN
+PASS Math.ceil(0) is 0
+PASS Math.ceil(-0) is -0
+PASS Math.ceil(-0.5) is -0
+PASS Math.ceil(1) is 1
+PASS Math.ceil(-1) is -1
+PASS Math.ceil(1.1) is 2
+PASS Math.ceil(-1.1) is -1
+PASS Math.ceil(Number.MIN_VALUE) is 1
+PASS Math.ceil(-Number.MIN_VALUE) is -0
+PASS Math.ceil(Number.MAX_VALUE) is Number.MAX_VALUE
+PASS Math.ceil(-Number.MAX_VALUE) is -Number.MAX_VALUE
+PASS Math.ceil(Infinity) is Infinity
+PASS Math.ceil(-Infinity) is -Infinity
+PASS Math.cos(NaN) is NaN
+PASS Math.cos(0) is 1
+PASS Math.cos(-0) is 1
+PASS Math.cos(Infinity) is NaN
+PASS Math.cos(-Infinity) is NaN
+PASS Math.exp(NaN) is NaN
+PASS Math.exp(0) is 1
+PASS Math.exp(-0) is 1
+PASS Math.exp(Infinity) is Infinity
+PASS Math.exp(-Infinity) is 0
+PASS Math.floor(NaN) is NaN
+PASS Math.floor(0) is 0
+PASS Math.floor(-0) is -0
+PASS Math.floor(0.5) is 0
+PASS Math.floor(1) is 1
+PASS Math.floor(-1) is -1
+PASS Math.floor(1.1) is 1
+PASS Math.floor(-1.1) is -2
+PASS Math.floor(Number.MIN_VALUE) is 0
+PASS Math.floor(-Number.MIN_VALUE) is -1
+PASS Math.floor(Number.MAX_VALUE) is Number.MAX_VALUE
+PASS Math.floor(-Number.MAX_VALUE) is -Number.MAX_VALUE
+PASS Math.floor(Infinity) is Infinity
+PASS Math.floor(-Infinity) is -Infinity
+PASS Math.log(NaN) is NaN
+PASS Math.log(0) is -Infinity
+PASS Math.log(-0) is -Infinity
+PASS Math.log(1) is 0
+PASS Math.log(-1) is NaN
+PASS Math.log(-1.1) is NaN
+PASS Math.log(Infinity) is Infinity
+PASS Math.log(-Infinity) is NaN
+PASS Math.max() is -Infinity
+PASS Math.max(NaN) is NaN
+PASS Math.max(NaN,1) is NaN
+PASS Math.max(0) is 0
+PASS Math.max(-0) is -0
+PASS Math.max(-0, 0) is 0
+PASS Math.min() is Infinity
+PASS Math.min(NaN) is NaN
+PASS Math.min(NaN,1) is NaN
+PASS Math.min(0) is 0
+PASS Math.min(-0) is -0
+PASS Math.min(-0, 0) is -0
+PASS Math.pow(NaN, NaN) is NaN
+PASS Math.pow(NaN, 0) is 1
+PASS Math.pow(NaN, -0) is 1
+PASS Math.pow(NaN, 1) is NaN
+PASS Math.pow(NaN, Infinity) is NaN
+PASS Math.pow(NaN, -Infinity) is NaN
+PASS Math.pow(0, NaN) is NaN
+PASS Math.pow(-0, NaN) is NaN
+PASS Math.pow(1, NaN) is NaN
+PASS Math.pow(Infinity, NaN) is NaN
+PASS Math.pow(-Infinity, NaN) is NaN
+PASS Math.round(NaN) is NaN
+PASS Math.round(0) is 0
+PASS Math.round(-0) is -0
+PASS Math.round(0.4) is 0
+PASS Math.round(-0.4) is -0
+PASS Math.round(0.5) is 1
+PASS Math.round(-0.5) is -0
+PASS Math.round(0.6) is 1
+PASS Math.round(-0.6) is -1
+PASS Math.round(1) is 1
+PASS Math.round(-1) is -1
+PASS Math.round(1.1) is 1
+PASS Math.round(-1.1) is -1
+PASS Math.round(1.5) is 2
+PASS Math.round(-1.5) is -1
+PASS Math.round(1.6) is 2
+PASS Math.round(-1.6) is -2
+PASS Math.round(8640000000000000) is 8640000000000000
+PASS Math.round(8640000000000000.5) is 8640000000000000
+PASS Math.round(8640000000000001) is 8640000000000001
+PASS Math.round(8640000000000002) is 8640000000000002
+PASS Math.round(9007199254740990) is 9007199254740990
+PASS Math.round(9007199254740991) is 9007199254740991
+PASS Math.round(1.7976931348623157e+308) is 1.7976931348623157e+308
+PASS Math.round(-8640000000000000) is -8640000000000000
+PASS Math.round(-8640000000000001) is -8640000000000001
+PASS Math.round(-8640000000000002) is -8640000000000002
+PASS Math.round(-9007199254740990) is -9007199254740990
+PASS Math.round(-9007199254740991) is -9007199254740991
+PASS Math.round(-1.7976931348623157e+308) is -1.7976931348623157e+308
+PASS Math.round(Infinity) is Infinity
+PASS Math.round(-Infinity) is -Infinity
+PASS Math.sin(NaN) is NaN
+PASS Math.sin(0) is 0
+PASS Math.sin(-0) is -0
+PASS Math.sin(Infinity) is NaN
+PASS Math.sin(-Infinity) is NaN
+PASS Math.sqrt(NaN) is NaN
+PASS Math.sqrt(0) is 0
+PASS Math.sqrt(-0) is -0
+PASS Math.sqrt(1) is 1
+PASS Math.sqrt(-1) is NaN
+PASS Math.sqrt(Infinity) is Infinity
+PASS Math.sqrt(-Infinity) is NaN
+PASS Math.tan(NaN) is NaN
+PASS Math.tan(0) is 0
+PASS Math.tan(-0) is -0
+PASS Math.tan(Infinity) is NaN
+PASS Math.tan(-Infinity) is NaN
+PASS delete Math; is true
+PASS 'Math' in global() is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/math-transforms-expected.txt b/test/webkit/math-transforms-expected.txt
new file mode 100644 (file)
index 0000000..21669c8
--- /dev/null
@@ -0,0 +1,2254 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for potential edge case bugs with certain math transforms involving multiplication by 1 and unary plus.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS values.someInt * 1 is +values.someInt
+PASS values.someInt * 1 is 42
+PASS 1 * values.someInt is +values.someInt
+PASS 1 * values.someInt is 42
+PASS values.someFloat * 1 is +values.someFloat
+PASS values.someFloat * 1 is 42.42
+PASS 1 * values.someFloat is +values.someFloat
+PASS 1 * values.someFloat is 42.42
+PASS values.one * 1 is +values.one
+PASS values.one * 1 is 1
+PASS 1 * values.one is +values.one
+PASS 1 * values.one is 1
+PASS values.minusOne * 1 is +values.minusOne
+PASS values.minusOne * 1 is -1
+PASS 1 * values.minusOne is +values.minusOne
+PASS 1 * values.minusOne is -1
+PASS values.zero * 1 is +values.zero
+PASS values.zero * 1 is 0
+PASS 1 * values.zero is +values.zero
+PASS 1 * values.zero is 0
+PASS values.minusZero * 1 is +values.minusZero
+PASS values.minusZero * 1 is -0
+PASS 1 * values.minusZero is +values.minusZero
+PASS 1 * values.minusZero is -0
+PASS values.infinity * 1 is +values.infinity
+PASS values.infinity * 1 is Infinity
+PASS 1 * values.infinity is +values.infinity
+PASS 1 * values.infinity is Infinity
+PASS values.minusInfinity * 1 is +values.minusInfinity
+PASS values.minusInfinity * 1 is -Infinity
+PASS 1 * values.minusInfinity is +values.minusInfinity
+PASS 1 * values.minusInfinity is -Infinity
+PASS values.notANumber * 1 is +values.notANumber
+PASS values.notANumber * 1 is NaN
+PASS 1 * values.notANumber is +values.notANumber
+PASS 1 * values.notANumber is NaN
+PASS values.nonNumberString * 1 is +values.nonNumberString
+PASS values.nonNumberString * 1 is NaN
+PASS 1 * values.nonNumberString is +values.nonNumberString
+PASS 1 * values.nonNumberString is NaN
+PASS values.someFloatString * 1 is +values.someFloatString
+PASS values.someFloatString * 1 is 42.42
+PASS 1 * values.someFloatString is +values.someFloatString
+PASS 1 * values.someFloatString is 42.42
+PASS +values.someInt * values.someInt is values.someInt * values.someInt
+PASS +values.someInt * values.someInt is 1764
+PASS values.someInt * +values.someInt is values.someInt * values.someInt
+PASS values.someInt * +values.someInt is 1764
+PASS +values.someInt * +values.someInt is values.someInt * values.someInt
+PASS +values.someInt * +values.someInt is 1764
+PASS +values.someInt / values.someInt is values.someInt / values.someInt
+PASS +values.someInt / values.someInt is 1
+PASS values.someInt / +values.someInt is values.someInt / values.someInt
+PASS values.someInt / +values.someInt is 1
+PASS +values.someInt / +values.someInt is values.someInt / values.someInt
+PASS +values.someInt / +values.someInt is 1
+PASS +values.someInt - values.someInt is values.someInt - values.someInt
+PASS +values.someInt - values.someInt is 0
+PASS values.someInt - +values.someInt is values.someInt - values.someInt
+PASS values.someInt - +values.someInt is 0
+PASS +values.someInt - +values.someInt is values.someInt - values.someInt
+PASS +values.someInt - +values.someInt is 0
+PASS +values.someInt * values.someFloat is values.someInt * values.someFloat
+PASS +values.someInt * values.someFloat is 1781.64
+PASS values.someInt * +values.someFloat is values.someInt * values.someFloat
+PASS values.someInt * +values.someFloat is 1781.64
+PASS +values.someInt * +values.someFloat is values.someInt * values.someFloat
+PASS +values.someInt * +values.someFloat is 1781.64
+PASS +values.someInt / values.someFloat is values.someInt / values.someFloat
+PASS +values.someInt / values.someFloat is 0.9900990099009901
+PASS values.someInt / +values.someFloat is values.someInt / values.someFloat
+PASS values.someInt / +values.someFloat is 0.9900990099009901
+PASS +values.someInt / +values.someFloat is values.someInt / values.someFloat
+PASS +values.someInt / +values.someFloat is 0.9900990099009901
+PASS +values.someInt - values.someFloat is values.someInt - values.someFloat
+PASS +values.someInt - values.someFloat is -0.4200000000000017
+PASS values.someInt - +values.someFloat is values.someInt - values.someFloat
+PASS values.someInt - +values.someFloat is -0.4200000000000017
+PASS +values.someInt - +values.someFloat is values.someInt - values.someFloat
+PASS +values.someInt - +values.someFloat is -0.4200000000000017
+PASS +values.someInt * values.one is values.someInt * values.one
+PASS +values.someInt * values.one is 42
+PASS values.someInt * +values.one is values.someInt * values.one
+PASS values.someInt * +values.one is 42
+PASS +values.someInt * +values.one is values.someInt * values.one
+PASS +values.someInt * +values.one is 42
+PASS +values.someInt / values.one is values.someInt / values.one
+PASS +values.someInt / values.one is 42
+PASS values.someInt / +values.one is values.someInt / values.one
+PASS values.someInt / +values.one is 42
+PASS +values.someInt / +values.one is values.someInt / values.one
+PASS +values.someInt / +values.one is 42
+PASS +values.someInt - values.one is values.someInt - values.one
+PASS +values.someInt - values.one is 41
+PASS values.someInt - +values.one is values.someInt - values.one
+PASS values.someInt - +values.one is 41
+PASS +values.someInt - +values.one is values.someInt - values.one
+PASS +values.someInt - +values.one is 41
+PASS +values.someInt * values.minusOne is values.someInt * values.minusOne
+PASS +values.someInt * values.minusOne is -42
+PASS values.someInt * +values.minusOne is values.someInt * values.minusOne
+PASS values.someInt * +values.minusOne is -42
+PASS +values.someInt * +values.minusOne is values.someInt * values.minusOne
+PASS +values.someInt * +values.minusOne is -42
+PASS +values.someInt / values.minusOne is values.someInt / values.minusOne
+PASS +values.someInt / values.minusOne is -42
+PASS values.someInt / +values.minusOne is values.someInt / values.minusOne
+PASS values.someInt / +values.minusOne is -42
+PASS +values.someInt / +values.minusOne is values.someInt / values.minusOne
+PASS +values.someInt / +values.minusOne is -42
+PASS +values.someInt - values.minusOne is values.someInt - values.minusOne
+PASS +values.someInt - values.minusOne is 43
+PASS values.someInt - +values.minusOne is values.someInt - values.minusOne
+PASS values.someInt - +values.minusOne is 43
+PASS +values.someInt - +values.minusOne is values.someInt - values.minusOne
+PASS +values.someInt - +values.minusOne is 43
+PASS +values.someInt * values.zero is values.someInt * values.zero
+PASS +values.someInt * values.zero is 0
+PASS values.someInt * +values.zero is values.someInt * values.zero
+PASS values.someInt * +values.zero is 0
+PASS +values.someInt * +values.zero is values.someInt * values.zero
+PASS +values.someInt * +values.zero is 0
+PASS +values.someInt / values.zero is values.someInt / values.zero
+PASS +values.someInt / values.zero is Infinity
+PASS values.someInt / +values.zero is values.someInt / values.zero
+PASS values.someInt / +values.zero is Infinity
+PASS +values.someInt / +values.zero is values.someInt / values.zero
+PASS +values.someInt / +values.zero is Infinity
+PASS +values.someInt - values.zero is values.someInt - values.zero
+PASS +values.someInt - values.zero is 42
+PASS values.someInt - +values.zero is values.someInt - values.zero
+PASS values.someInt - +values.zero is 42
+PASS +values.someInt - +values.zero is values.someInt - values.zero
+PASS +values.someInt - +values.zero is 42
+PASS +values.someInt * values.minusZero is values.someInt * values.minusZero
+PASS +values.someInt * values.minusZero is -0
+PASS values.someInt * +values.minusZero is values.someInt * values.minusZero
+PASS values.someInt * +values.minusZero is -0
+PASS +values.someInt * +values.minusZero is values.someInt * values.minusZero
+PASS +values.someInt * +values.minusZero is -0
+PASS +values.someInt / values.minusZero is values.someInt / values.minusZero
+PASS +values.someInt / values.minusZero is -Infinity
+PASS values.someInt / +values.minusZero is values.someInt / values.minusZero
+PASS values.someInt / +values.minusZero is -Infinity
+PASS +values.someInt / +values.minusZero is values.someInt / values.minusZero
+PASS +values.someInt / +values.minusZero is -Infinity
+PASS +values.someInt - values.minusZero is values.someInt - values.minusZero
+PASS +values.someInt - values.minusZero is 42
+PASS values.someInt - +values.minusZero is values.someInt - values.minusZero
+PASS values.someInt - +values.minusZero is 42
+PASS +values.someInt - +values.minusZero is values.someInt - values.minusZero
+PASS +values.someInt - +values.minusZero is 42
+PASS +values.someInt * values.infinity is values.someInt * values.infinity
+PASS +values.someInt * values.infinity is Infinity
+PASS values.someInt * +values.infinity is values.someInt * values.infinity
+PASS values.someInt * +values.infinity is Infinity
+PASS +values.someInt * +values.infinity is values.someInt * values.infinity
+PASS +values.someInt * +values.infinity is Infinity
+PASS +values.someInt / values.infinity is values.someInt / values.infinity
+PASS +values.someInt / values.infinity is 0
+PASS values.someInt / +values.infinity is values.someInt / values.infinity
+PASS values.someInt / +values.infinity is 0
+PASS +values.someInt / +values.infinity is values.someInt / values.infinity
+PASS +values.someInt / +values.infinity is 0
+PASS +values.someInt - values.infinity is values.someInt - values.infinity
+PASS +values.someInt - values.infinity is -Infinity
+PASS values.someInt - +values.infinity is values.someInt - values.infinity
+PASS values.someInt - +values.infinity is -Infinity
+PASS +values.someInt - +values.infinity is values.someInt - values.infinity
+PASS +values.someInt - +values.infinity is -Infinity
+PASS +values.someInt * values.minusInfinity is values.someInt * values.minusInfinity
+PASS +values.someInt * values.minusInfinity is -Infinity
+PASS values.someInt * +values.minusInfinity is values.someInt * values.minusInfinity
+PASS values.someInt * +values.minusInfinity is -Infinity
+PASS +values.someInt * +values.minusInfinity is values.someInt * values.minusInfinity
+PASS +values.someInt * +values.minusInfinity is -Infinity
+PASS +values.someInt / values.minusInfinity is values.someInt / values.minusInfinity
+PASS +values.someInt / values.minusInfinity is -0
+PASS values.someInt / +values.minusInfinity is values.someInt / values.minusInfinity
+PASS values.someInt / +values.minusInfinity is -0
+PASS +values.someInt / +values.minusInfinity is values.someInt / values.minusInfinity
+PASS +values.someInt / +values.minusInfinity is -0
+PASS +values.someInt - values.minusInfinity is values.someInt - values.minusInfinity
+PASS +values.someInt - values.minusInfinity is Infinity
+PASS values.someInt - +values.minusInfinity is values.someInt - values.minusInfinity
+PASS values.someInt - +values.minusInfinity is Infinity
+PASS +values.someInt - +values.minusInfinity is values.someInt - values.minusInfinity
+PASS +values.someInt - +values.minusInfinity is Infinity
+PASS +values.someInt * values.notANumber is values.someInt * values.notANumber
+PASS +values.someInt * values.notANumber is NaN
+PASS values.someInt * +values.notANumber is values.someInt * values.notANumber
+PASS values.someInt * +values.notANumber is NaN
+PASS +values.someInt * +values.notANumber is values.someInt * values.notANumber
+PASS +values.someInt * +values.notANumber is NaN
+PASS +values.someInt / values.notANumber is values.someInt / values.notANumber
+PASS +values.someInt / values.notANumber is NaN
+PASS values.someInt / +values.notANumber is values.someInt / values.notANumber
+PASS values.someInt / +values.notANumber is NaN
+PASS +values.someInt / +values.notANumber is values.someInt / values.notANumber
+PASS +values.someInt / +values.notANumber is NaN
+PASS +values.someInt - values.notANumber is values.someInt - values.notANumber
+PASS +values.someInt - values.notANumber is NaN
+PASS values.someInt - +values.notANumber is values.someInt - values.notANumber
+PASS values.someInt - +values.notANumber is NaN
+PASS +values.someInt - +values.notANumber is values.someInt - values.notANumber
+PASS +values.someInt - +values.notANumber is NaN
+PASS +values.someInt * values.nonNumberString is values.someInt * values.nonNumberString
+PASS +values.someInt * values.nonNumberString is NaN
+PASS values.someInt * +values.nonNumberString is values.someInt * values.nonNumberString
+PASS values.someInt * +values.nonNumberString is NaN
+PASS +values.someInt * +values.nonNumberString is values.someInt * values.nonNumberString
+PASS +values.someInt * +values.nonNumberString is NaN
+PASS +values.someInt / values.nonNumberString is values.someInt / values.nonNumberString
+PASS +values.someInt / values.nonNumberString is NaN
+PASS values.someInt / +values.nonNumberString is values.someInt / values.nonNumberString
+PASS values.someInt / +values.nonNumberString is NaN
+PASS +values.someInt / +values.nonNumberString is values.someInt / values.nonNumberString
+PASS +values.someInt / +values.nonNumberString is NaN
+PASS +values.someInt - values.nonNumberString is values.someInt - values.nonNumberString
+PASS +values.someInt - values.nonNumberString is NaN
+PASS values.someInt - +values.nonNumberString is values.someInt - values.nonNumberString
+PASS values.someInt - +values.nonNumberString is NaN
+PASS +values.someInt - +values.nonNumberString is values.someInt - values.nonNumberString
+PASS +values.someInt - +values.nonNumberString is NaN
+PASS +values.someInt * values.someFloatString is values.someInt * values.someFloatString
+PASS +values.someInt * values.someFloatString is 1781.64
+PASS values.someInt * +values.someFloatString is values.someInt * values.someFloatString
+PASS values.someInt * +values.someFloatString is 1781.64
+PASS +values.someInt * +values.someFloatString is values.someInt * values.someFloatString
+PASS +values.someInt * +values.someFloatString is 1781.64
+PASS +values.someInt / values.someFloatString is values.someInt / values.someFloatString
+PASS +values.someInt / values.someFloatString is 0.9900990099009901
+PASS values.someInt / +values.someFloatString is values.someInt / values.someFloatString
+PASS values.someInt / +values.someFloatString is 0.9900990099009901
+PASS +values.someInt / +values.someFloatString is values.someInt / values.someFloatString
+PASS +values.someInt / +values.someFloatString is 0.9900990099009901
+PASS +values.someInt - values.someFloatString is values.someInt - values.someFloatString
+PASS +values.someInt - values.someFloatString is -0.4200000000000017
+PASS values.someInt - +values.someFloatString is values.someInt - values.someFloatString
+PASS values.someInt - +values.someFloatString is -0.4200000000000017
+PASS +values.someInt - +values.someFloatString is values.someInt - values.someFloatString
+PASS +values.someInt - +values.someFloatString is -0.4200000000000017
+PASS +values.someFloat * values.someInt is values.someFloat * values.someInt
+PASS +values.someFloat * values.someInt is 1781.64
+PASS values.someFloat * +values.someInt is values.someFloat * values.someInt
+PASS values.someFloat * +values.someInt is 1781.64
+PASS +values.someFloat * +values.someInt is values.someFloat * values.someInt
+PASS +values.someFloat * +values.someInt is 1781.64
+PASS +values.someFloat / values.someInt is values.someFloat / values.someInt
+PASS +values.someFloat / values.someInt is 1.01
+PASS values.someFloat / +values.someInt is values.someFloat / values.someInt
+PASS values.someFloat / +values.someInt is 1.01
+PASS +values.someFloat / +values.someInt is values.someFloat / values.someInt
+PASS +values.someFloat / +values.someInt is 1.01
+PASS +values.someFloat - values.someInt is values.someFloat - values.someInt
+PASS +values.someFloat - values.someInt is 0.4200000000000017
+PASS values.someFloat - +values.someInt is values.someFloat - values.someInt
+PASS values.someFloat - +values.someInt is 0.4200000000000017
+PASS +values.someFloat - +values.someInt is values.someFloat - values.someInt
+PASS +values.someFloat - +values.someInt is 0.4200000000000017
+PASS +values.someFloat * values.someFloat is values.someFloat * values.someFloat
+PASS +values.someFloat * values.someFloat is 1799.4564000000003
+PASS values.someFloat * +values.someFloat is values.someFloat * values.someFloat
+PASS values.someFloat * +values.someFloat is 1799.4564000000003
+PASS +values.someFloat * +values.someFloat is values.someFloat * values.someFloat
+PASS +values.someFloat * +values.someFloat is 1799.4564000000003
+PASS +values.someFloat / values.someFloat is values.someFloat / values.someFloat
+PASS +values.someFloat / values.someFloat is 1
+PASS values.someFloat / +values.someFloat is values.someFloat / values.someFloat
+PASS values.someFloat / +values.someFloat is 1
+PASS +values.someFloat / +values.someFloat is values.someFloat / values.someFloat
+PASS +values.someFloat / +values.someFloat is 1
+PASS +values.someFloat - values.someFloat is values.someFloat - values.someFloat
+PASS +values.someFloat - values.someFloat is 0
+PASS values.someFloat - +values.someFloat is values.someFloat - values.someFloat
+PASS values.someFloat - +values.someFloat is 0
+PASS +values.someFloat - +values.someFloat is values.someFloat - values.someFloat
+PASS +values.someFloat - +values.someFloat is 0
+PASS +values.someFloat * values.one is values.someFloat * values.one
+PASS +values.someFloat * values.one is 42.42
+PASS values.someFloat * +values.one is values.someFloat * values.one
+PASS values.someFloat * +values.one is 42.42
+PASS +values.someFloat * +values.one is values.someFloat * values.one
+PASS +values.someFloat * +values.one is 42.42
+PASS +values.someFloat / values.one is values.someFloat / values.one
+PASS +values.someFloat / values.one is 42.42
+PASS values.someFloat / +values.one is values.someFloat / values.one
+PASS values.someFloat / +values.one is 42.42
+PASS +values.someFloat / +values.one is values.someFloat / values.one
+PASS +values.someFloat / +values.one is 42.42
+PASS +values.someFloat - values.one is values.someFloat - values.one
+PASS +values.someFloat - values.one is 41.42
+PASS values.someFloat - +values.one is values.someFloat - values.one
+PASS values.someFloat - +values.one is 41.42
+PASS +values.someFloat - +values.one is values.someFloat - values.one
+PASS +values.someFloat - +values.one is 41.42
+PASS +values.someFloat * values.minusOne is values.someFloat * values.minusOne
+PASS +values.someFloat * values.minusOne is -42.42
+PASS values.someFloat * +values.minusOne is values.someFloat * values.minusOne
+PASS values.someFloat * +values.minusOne is -42.42
+PASS +values.someFloat * +values.minusOne is values.someFloat * values.minusOne
+PASS +values.someFloat * +values.minusOne is -42.42
+PASS +values.someFloat / values.minusOne is values.someFloat / values.minusOne
+PASS +values.someFloat / values.minusOne is -42.42
+PASS values.someFloat / +values.minusOne is values.someFloat / values.minusOne
+PASS values.someFloat / +values.minusOne is -42.42
+PASS +values.someFloat / +values.minusOne is values.someFloat / values.minusOne
+PASS +values.someFloat / +values.minusOne is -42.42
+PASS +values.someFloat - values.minusOne is values.someFloat - values.minusOne
+PASS +values.someFloat - values.minusOne is 43.42
+PASS values.someFloat - +values.minusOne is values.someFloat - values.minusOne
+PASS values.someFloat - +values.minusOne is 43.42
+PASS +values.someFloat - +values.minusOne is values.someFloat - values.minusOne
+PASS +values.someFloat - +values.minusOne is 43.42
+PASS +values.someFloat * values.zero is values.someFloat * values.zero
+PASS +values.someFloat * values.zero is 0
+PASS values.someFloat * +values.zero is values.someFloat * values.zero
+PASS values.someFloat * +values.zero is 0
+PASS +values.someFloat * +values.zero is values.someFloat * values.zero
+PASS +values.someFloat * +values.zero is 0
+PASS +values.someFloat / values.zero is values.someFloat / values.zero
+PASS +values.someFloat / values.zero is Infinity
+PASS values.someFloat / +values.zero is values.someFloat / values.zero
+PASS values.someFloat / +values.zero is Infinity
+PASS +values.someFloat / +values.zero is values.someFloat / values.zero
+PASS +values.someFloat / +values.zero is Infinity
+PASS +values.someFloat - values.zero is values.someFloat - values.zero
+PASS +values.someFloat - values.zero is 42.42
+PASS values.someFloat - +values.zero is values.someFloat - values.zero
+PASS values.someFloat - +values.zero is 42.42
+PASS +values.someFloat - +values.zero is values.someFloat - values.zero
+PASS +values.someFloat - +values.zero is 42.42
+PASS +values.someFloat * values.minusZero is values.someFloat * values.minusZero
+PASS +values.someFloat * values.minusZero is -0
+PASS values.someFloat * +values.minusZero is values.someFloat * values.minusZero
+PASS values.someFloat * +values.minusZero is -0
+PASS +values.someFloat * +values.minusZero is values.someFloat * values.minusZero
+PASS +values.someFloat * +values.minusZero is -0
+PASS +values.someFloat / values.minusZero is values.someFloat / values.minusZero
+PASS +values.someFloat / values.minusZero is -Infinity
+PASS values.someFloat / +values.minusZero is values.someFloat / values.minusZero
+PASS values.someFloat / +values.minusZero is -Infinity
+PASS +values.someFloat / +values.minusZero is values.someFloat / values.minusZero
+PASS +values.someFloat / +values.minusZero is -Infinity
+PASS +values.someFloat - values.minusZero is values.someFloat - values.minusZero
+PASS +values.someFloat - values.minusZero is 42.42
+PASS values.someFloat - +values.minusZero is values.someFloat - values.minusZero
+PASS values.someFloat - +values.minusZero is 42.42
+PASS +values.someFloat - +values.minusZero is values.someFloat - values.minusZero
+PASS +values.someFloat - +values.minusZero is 42.42
+PASS +values.someFloat * values.infinity is values.someFloat * values.infinity
+PASS +values.someFloat * values.infinity is Infinity
+PASS values.someFloat * +values.infinity is values.someFloat * values.infinity
+PASS values.someFloat * +values.infinity is Infinity
+PASS +values.someFloat * +values.infinity is values.someFloat * values.infinity
+PASS +values.someFloat * +values.infinity is Infinity
+PASS +values.someFloat / values.infinity is values.someFloat / values.infinity
+PASS +values.someFloat / values.infinity is 0
+PASS values.someFloat / +values.infinity is values.someFloat / values.infinity
+PASS values.someFloat / +values.infinity is 0
+PASS +values.someFloat / +values.infinity is values.someFloat / values.infinity
+PASS +values.someFloat / +values.infinity is 0
+PASS +values.someFloat - values.infinity is values.someFloat - values.infinity
+PASS +values.someFloat - values.infinity is -Infinity
+PASS values.someFloat - +values.infinity is values.someFloat - values.infinity
+PASS values.someFloat - +values.infinity is -Infinity
+PASS +values.someFloat - +values.infinity is values.someFloat - values.infinity
+PASS +values.someFloat - +values.infinity is -Infinity
+PASS +values.someFloat * values.minusInfinity is values.someFloat * values.minusInfinity
+PASS +values.someFloat * values.minusInfinity is -Infinity
+PASS values.someFloat * +values.minusInfinity is values.someFloat * values.minusInfinity
+PASS values.someFloat * +values.minusInfinity is -Infinity
+PASS +values.someFloat * +values.minusInfinity is values.someFloat * values.minusInfinity
+PASS +values.someFloat * +values.minusInfinity is -Infinity
+PASS +values.someFloat / values.minusInfinity is values.someFloat / values.minusInfinity
+PASS +values.someFloat / values.minusInfinity is -0
+PASS values.someFloat / +values.minusInfinity is values.someFloat / values.minusInfinity
+PASS values.someFloat / +values.minusInfinity is -0
+PASS +values.someFloat / +values.minusInfinity is values.someFloat / values.minusInfinity
+PASS +values.someFloat / +values.minusInfinity is -0
+PASS +values.someFloat - values.minusInfinity is values.someFloat - values.minusInfinity
+PASS +values.someFloat - values.minusInfinity is Infinity
+PASS values.someFloat - +values.minusInfinity is values.someFloat - values.minusInfinity
+PASS values.someFloat - +values.minusInfinity is Infinity
+PASS +values.someFloat - +values.minusInfinity is values.someFloat - values.minusInfinity
+PASS +values.someFloat - +values.minusInfinity is Infinity
+PASS +values.someFloat * values.notANumber is values.someFloat * values.notANumber
+PASS +values.someFloat * values.notANumber is NaN
+PASS values.someFloat * +values.notANumber is values.someFloat * values.notANumber
+PASS values.someFloat * +values.notANumber is NaN
+PASS +values.someFloat * +values.notANumber is values.someFloat * values.notANumber
+PASS +values.someFloat * +values.notANumber is NaN
+PASS +values.someFloat / values.notANumber is values.someFloat / values.notANumber
+PASS +values.someFloat / values.notANumber is NaN
+PASS values.someFloat / +values.notANumber is values.someFloat / values.notANumber
+PASS values.someFloat / +values.notANumber is NaN
+PASS +values.someFloat / +values.notANumber is values.someFloat / values.notANumber
+PASS +values.someFloat / +values.notANumber is NaN
+PASS +values.someFloat - values.notANumber is values.someFloat - values.notANumber
+PASS +values.someFloat - values.notANumber is NaN
+PASS values.someFloat - +values.notANumber is values.someFloat - values.notANumber
+PASS values.someFloat - +values.notANumber is NaN
+PASS +values.someFloat - +values.notANumber is values.someFloat - values.notANumber
+PASS +values.someFloat - +values.notANumber is NaN
+PASS +values.someFloat * values.nonNumberString is values.someFloat * values.nonNumberString
+PASS +values.someFloat * values.nonNumberString is NaN
+PASS values.someFloat * +values.nonNumberString is values.someFloat * values.nonNumberString
+PASS values.someFloat * +values.nonNumberString is NaN
+PASS +values.someFloat * +values.nonNumberString is values.someFloat * values.nonNumberString
+PASS +values.someFloat * +values.nonNumberString is NaN
+PASS +values.someFloat / values.nonNumberString is values.someFloat / values.nonNumberString
+PASS +values.someFloat / values.nonNumberString is NaN
+PASS values.someFloat / +values.nonNumberString is values.someFloat / values.nonNumberString
+PASS values.someFloat / +values.nonNumberString is NaN
+PASS +values.someFloat / +values.nonNumberString is values.someFloat / values.nonNumberString
+PASS +values.someFloat / +values.nonNumberString is NaN
+PASS +values.someFloat - values.nonNumberString is values.someFloat - values.nonNumberString
+PASS +values.someFloat - values.nonNumberString is NaN
+PASS values.someFloat - +values.nonNumberString is values.someFloat - values.nonNumberString
+PASS values.someFloat - +values.nonNumberString is NaN
+PASS +values.someFloat - +values.nonNumberString is values.someFloat - values.nonNumberString
+PASS +values.someFloat - +values.nonNumberString is NaN
+PASS +values.someFloat * values.someFloatString is values.someFloat * values.someFloatString
+PASS +values.someFloat * values.someFloatString is 1799.4564000000003
+PASS values.someFloat * +values.someFloatString is values.someFloat * values.someFloatString
+PASS values.someFloat * +values.someFloatString is 1799.4564000000003
+PASS +values.someFloat * +values.someFloatString is values.someFloat * values.someFloatString
+PASS +values.someFloat * +values.someFloatString is 1799.4564000000003
+PASS +values.someFloat / values.someFloatString is values.someFloat / values.someFloatString
+PASS +values.someFloat / values.someFloatString is 1
+PASS values.someFloat / +values.someFloatString is values.someFloat / values.someFloatString
+PASS values.someFloat / +values.someFloatString is 1
+PASS +values.someFloat / +values.someFloatString is values.someFloat / values.someFloatString
+PASS +values.someFloat / +values.someFloatString is 1
+PASS +values.someFloat - values.someFloatString is values.someFloat - values.someFloatString
+PASS +values.someFloat - values.someFloatString is 0
+PASS values.someFloat - +values.someFloatString is values.someFloat - values.someFloatString
+PASS values.someFloat - +values.someFloatString is 0
+PASS +values.someFloat - +values.someFloatString is values.someFloat - values.someFloatString
+PASS +values.someFloat - +values.someFloatString is 0
+PASS +values.one * values.someInt is values.one * values.someInt
+PASS +values.one * values.someInt is 42
+PASS values.one * +values.someInt is values.one * values.someInt
+PASS values.one * +values.someInt is 42
+PASS +values.one * +values.someInt is values.one * values.someInt
+PASS +values.one * +values.someInt is 42
+PASS +values.one / values.someInt is values.one / values.someInt
+PASS +values.one / values.someInt is 0.023809523809523808
+PASS values.one / +values.someInt is values.one / values.someInt
+PASS values.one / +values.someInt is 0.023809523809523808
+PASS +values.one / +values.someInt is values.one / values.someInt
+PASS +values.one / +values.someInt is 0.023809523809523808
+PASS +values.one - values.someInt is values.one - values.someInt
+PASS +values.one - values.someInt is -41
+PASS values.one - +values.someInt is values.one - values.someInt
+PASS values.one - +values.someInt is -41
+PASS +values.one - +values.someInt is values.one - values.someInt
+PASS +values.one - +values.someInt is -41
+PASS +values.one * values.someFloat is values.one * values.someFloat
+PASS +values.one * values.someFloat is 42.42
+PASS values.one * +values.someFloat is values.one * values.someFloat
+PASS values.one * +values.someFloat is 42.42
+PASS +values.one * +values.someFloat is values.one * values.someFloat
+PASS +values.one * +values.someFloat is 42.42
+PASS +values.one / values.someFloat is values.one / values.someFloat
+PASS +values.one / values.someFloat is 0.023573785950023574
+PASS values.one / +values.someFloat is values.one / values.someFloat
+PASS values.one / +values.someFloat is 0.023573785950023574
+PASS +values.one / +values.someFloat is values.one / values.someFloat
+PASS +values.one / +values.someFloat is 0.023573785950023574
+PASS +values.one - values.someFloat is values.one - values.someFloat
+PASS +values.one - values.someFloat is -41.42
+PASS values.one - +values.someFloat is values.one - values.someFloat
+PASS values.one - +values.someFloat is -41.42
+PASS +values.one - +values.someFloat is values.one - values.someFloat
+PASS +values.one - +values.someFloat is -41.42
+PASS +values.one * values.one is values.one * values.one
+PASS +values.one * values.one is 1
+PASS values.one * +values.one is values.one * values.one
+PASS values.one * +values.one is 1
+PASS +values.one * +values.one is values.one * values.one
+PASS +values.one * +values.one is 1
+PASS +values.one / values.one is values.one / values.one
+PASS +values.one / values.one is 1
+PASS values.one / +values.one is values.one / values.one
+PASS values.one / +values.one is 1
+PASS +values.one / +values.one is values.one / values.one
+PASS +values.one / +values.one is 1
+PASS +values.one - values.one is values.one - values.one
+PASS +values.one - values.one is 0
+PASS values.one - +values.one is values.one - values.one
+PASS values.one - +values.one is 0
+PASS +values.one - +values.one is values.one - values.one
+PASS +values.one - +values.one is 0
+PASS +values.one * values.minusOne is values.one * values.minusOne
+PASS +values.one * values.minusOne is -1
+PASS values.one * +values.minusOne is values.one * values.minusOne
+PASS values.one * +values.minusOne is -1
+PASS +values.one * +values.minusOne is values.one * values.minusOne
+PASS +values.one * +values.minusOne is -1
+PASS +values.one / values.minusOne is values.one / values.minusOne
+PASS +values.one / values.minusOne is -1
+PASS values.one / +values.minusOne is values.one / values.minusOne
+PASS values.one / +values.minusOne is -1
+PASS +values.one / +values.minusOne is values.one / values.minusOne
+PASS +values.one / +values.minusOne is -1
+PASS +values.one - values.minusOne is values.one - values.minusOne
+PASS +values.one - values.minusOne is 2
+PASS values.one - +values.minusOne is values.one - values.minusOne
+PASS values.one - +values.minusOne is 2
+PASS +values.one - +values.minusOne is values.one - values.minusOne
+PASS +values.one - +values.minusOne is 2
+PASS +values.one * values.zero is values.one * values.zero
+PASS +values.one * values.zero is 0
+PASS values.one * +values.zero is values.one * values.zero
+PASS values.one * +values.zero is 0
+PASS +values.one * +values.zero is values.one * values.zero
+PASS +values.one * +values.zero is 0
+PASS +values.one / values.zero is values.one / values.zero
+PASS +values.one / values.zero is Infinity
+PASS values.one / +values.zero is values.one / values.zero
+PASS values.one / +values.zero is Infinity
+PASS +values.one / +values.zero is values.one / values.zero
+PASS +values.one / +values.zero is Infinity
+PASS +values.one - values.zero is values.one - values.zero
+PASS +values.one - values.zero is 1
+PASS values.one - +values.zero is values.one - values.zero
+PASS values.one - +values.zero is 1
+PASS +values.one - +values.zero is values.one - values.zero
+PASS +values.one - +values.zero is 1
+PASS +values.one * values.minusZero is values.one * values.minusZero
+PASS +values.one * values.minusZero is -0
+PASS values.one * +values.minusZero is values.one * values.minusZero
+PASS values.one * +values.minusZero is -0
+PASS +values.one * +values.minusZero is values.one * values.minusZero
+PASS +values.one * +values.minusZero is -0
+PASS +values.one / values.minusZero is values.one / values.minusZero
+PASS +values.one / values.minusZero is -Infinity
+PASS values.one / +values.minusZero is values.one / values.minusZero
+PASS values.one / +values.minusZero is -Infinity
+PASS +values.one / +values.minusZero is values.one / values.minusZero
+PASS +values.one / +values.minusZero is -Infinity
+PASS +values.one - values.minusZero is values.one - values.minusZero
+PASS +values.one - values.minusZero is 1
+PASS values.one - +values.minusZero is values.one - values.minusZero
+PASS values.one - +values.minusZero is 1
+PASS +values.one - +values.minusZero is values.one - values.minusZero
+PASS +values.one - +values.minusZero is 1
+PASS +values.one * values.infinity is values.one * values.infinity
+PASS +values.one * values.infinity is Infinity
+PASS values.one * +values.infinity is values.one * values.infinity
+PASS values.one * +values.infinity is Infinity
+PASS +values.one * +values.infinity is values.one * values.infinity
+PASS +values.one * +values.infinity is Infinity
+PASS +values.one / values.infinity is values.one / values.infinity
+PASS +values.one / values.infinity is 0
+PASS values.one / +values.infinity is values.one / values.infinity
+PASS values.one / +values.infinity is 0
+PASS +values.one / +values.infinity is values.one / values.infinity
+PASS +values.one / +values.infinity is 0
+PASS +values.one - values.infinity is values.one - values.infinity
+PASS +values.one - values.infinity is -Infinity
+PASS values.one - +values.infinity is values.one - values.infinity
+PASS values.one - +values.infinity is -Infinity
+PASS +values.one - +values.infinity is values.one - values.infinity
+PASS +values.one - +values.infinity is -Infinity
+PASS +values.one * values.minusInfinity is values.one * values.minusInfinity
+PASS +values.one * values.minusInfinity is -Infinity
+PASS values.one * +values.minusInfinity is values.one * values.minusInfinity
+PASS values.one * +values.minusInfinity is -Infinity
+PASS +values.one * +values.minusInfinity is values.one * values.minusInfinity
+PASS +values.one * +values.minusInfinity is -Infinity
+PASS +values.one / values.minusInfinity is values.one / values.minusInfinity
+PASS +values.one / values.minusInfinity is -0
+PASS values.one / +values.minusInfinity is values.one / values.minusInfinity
+PASS values.one / +values.minusInfinity is -0
+PASS +values.one / +values.minusInfinity is values.one / values.minusInfinity
+PASS +values.one / +values.minusInfinity is -0
+PASS +values.one - values.minusInfinity is values.one - values.minusInfinity
+PASS +values.one - values.minusInfinity is Infinity
+PASS values.one - +values.minusInfinity is values.one - values.minusInfinity
+PASS values.one - +values.minusInfinity is Infinity
+PASS +values.one - +values.minusInfinity is values.one - values.minusInfinity
+PASS +values.one - +values.minusInfinity is Infinity
+PASS +values.one * values.notANumber is values.one * values.notANumber
+PASS +values.one * values.notANumber is NaN
+PASS values.one * +values.notANumber is values.one * values.notANumber
+PASS values.one * +values.notANumber is NaN
+PASS +values.one * +values.notANumber is values.one * values.notANumber
+PASS +values.one * +values.notANumber is NaN
+PASS +values.one / values.notANumber is values.one / values.notANumber
+PASS +values.one / values.notANumber is NaN
+PASS values.one / +values.notANumber is values.one / values.notANumber
+PASS values.one / +values.notANumber is NaN
+PASS +values.one / +values.notANumber is values.one / values.notANumber
+PASS +values.one / +values.notANumber is NaN
+PASS +values.one - values.notANumber is values.one - values.notANumber
+PASS +values.one - values.notANumber is NaN
+PASS values.one - +values.notANumber is values.one - values.notANumber
+PASS values.one - +values.notANumber is NaN
+PASS +values.one - +values.notANumber is values.one - values.notANumber
+PASS +values.one - +values.notANumber is NaN
+PASS +values.one * values.nonNumberString is values.one * values.nonNumberString
+PASS +values.one * values.nonNumberString is NaN
+PASS values.one * +values.nonNumberString is values.one * values.nonNumberString
+PASS values.one * +values.nonNumberString is NaN
+PASS +values.one * +values.nonNumberString is values.one * values.nonNumberString
+PASS +values.one * +values.nonNumberString is NaN
+PASS +values.one / values.nonNumberString is values.one / values.nonNumberString
+PASS +values.one / values.nonNumberString is NaN
+PASS values.one / +values.nonNumberString is values.one / values.nonNumberString
+PASS values.one / +values.nonNumberString is NaN
+PASS +values.one / +values.nonNumberString is values.one / values.nonNumberString
+PASS +values.one / +values.nonNumberString is NaN
+PASS +values.one - values.nonNumberString is values.one - values.nonNumberString
+PASS +values.one - values.nonNumberString is NaN
+PASS values.one - +values.nonNumberString is values.one - values.nonNumberString
+PASS values.one - +values.nonNumberString is NaN
+PASS +values.one - +values.nonNumberString is values.one - values.nonNumberString
+PASS +values.one - +values.nonNumberString is NaN
+PASS +values.one * values.someFloatString is values.one * values.someFloatString
+PASS +values.one * values.someFloatString is 42.42
+PASS values.one * +values.someFloatString is values.one * values.someFloatString
+PASS values.one * +values.someFloatString is 42.42
+PASS +values.one * +values.someFloatString is values.one * values.someFloatString
+PASS +values.one * +values.someFloatString is 42.42
+PASS +values.one / values.someFloatString is values.one / values.someFloatString
+PASS +values.one / values.someFloatString is 0.023573785950023574
+PASS values.one / +values.someFloatString is values.one / values.someFloatString
+PASS values.one / +values.someFloatString is 0.023573785950023574
+PASS +values.one / +values.someFloatString is values.one / values.someFloatString
+PASS +values.one / +values.someFloatString is 0.023573785950023574
+PASS +values.one - values.someFloatString is values.one - values.someFloatString
+PASS +values.one - values.someFloatString is -41.42
+PASS values.one - +values.someFloatString is values.one - values.someFloatString
+PASS values.one - +values.someFloatString is -41.42
+PASS +values.one - +values.someFloatString is values.one - values.someFloatString
+PASS +values.one - +values.someFloatString is -41.42
+PASS +values.minusOne * values.someInt is values.minusOne * values.someInt
+PASS +values.minusOne * values.someInt is -42
+PASS values.minusOne * +values.someInt is values.minusOne * values.someInt
+PASS values.minusOne * +values.someInt is -42
+PASS +values.minusOne * +values.someInt is values.minusOne * values.someInt
+PASS +values.minusOne * +values.someInt is -42
+PASS +values.minusOne / values.someInt is values.minusOne / values.someInt
+PASS +values.minusOne / values.someInt is -0.023809523809523808
+PASS values.minusOne / +values.someInt is values.minusOne / values.someInt
+PASS values.minusOne / +values.someInt is -0.023809523809523808
+PASS +values.minusOne / +values.someInt is values.minusOne / values.someInt
+PASS +values.minusOne / +values.someInt is -0.023809523809523808
+PASS +values.minusOne - values.someInt is values.minusOne - values.someInt
+PASS +values.minusOne - values.someInt is -43
+PASS values.minusOne - +values.someInt is values.minusOne - values.someInt
+PASS values.minusOne - +values.someInt is -43
+PASS +values.minusOne - +values.someInt is values.minusOne - values.someInt
+PASS +values.minusOne - +values.someInt is -43
+PASS +values.minusOne * values.someFloat is values.minusOne * values.someFloat
+PASS +values.minusOne * values.someFloat is -42.42
+PASS values.minusOne * +values.someFloat is values.minusOne * values.someFloat
+PASS values.minusOne * +values.someFloat is -42.42
+PASS +values.minusOne * +values.someFloat is values.minusOne * values.someFloat
+PASS +values.minusOne * +values.someFloat is -42.42
+PASS +values.minusOne / values.someFloat is values.minusOne / values.someFloat
+PASS +values.minusOne / values.someFloat is -0.023573785950023574
+PASS values.minusOne / +values.someFloat is values.minusOne / values.someFloat
+PASS values.minusOne / +values.someFloat is -0.023573785950023574
+PASS +values.minusOne / +values.someFloat is values.minusOne / values.someFloat
+PASS +values.minusOne / +values.someFloat is -0.023573785950023574
+PASS +values.minusOne - values.someFloat is values.minusOne - values.someFloat
+PASS +values.minusOne - values.someFloat is -43.42
+PASS values.minusOne - +values.someFloat is values.minusOne - values.someFloat
+PASS values.minusOne - +values.someFloat is -43.42
+PASS +values.minusOne - +values.someFloat is values.minusOne - values.someFloat
+PASS +values.minusOne - +values.someFloat is -43.42
+PASS +values.minusOne * values.one is values.minusOne * values.one
+PASS +values.minusOne * values.one is -1
+PASS values.minusOne * +values.one is values.minusOne * values.one
+PASS values.minusOne * +values.one is -1
+PASS +values.minusOne * +values.one is values.minusOne * values.one
+PASS +values.minusOne * +values.one is -1
+PASS +values.minusOne / values.one is values.minusOne / values.one
+PASS +values.minusOne / values.one is -1
+PASS values.minusOne / +values.one is values.minusOne / values.one
+PASS values.minusOne / +values.one is -1
+PASS +values.minusOne / +values.one is values.minusOne / values.one
+PASS +values.minusOne / +values.one is -1
+PASS +values.minusOne - values.one is values.minusOne - values.one
+PASS +values.minusOne - values.one is -2
+PASS values.minusOne - +values.one is values.minusOne - values.one
+PASS values.minusOne - +values.one is -2
+PASS +values.minusOne - +values.one is values.minusOne - values.one
+PASS +values.minusOne - +values.one is -2
+PASS +values.minusOne * values.minusOne is values.minusOne * values.minusOne
+PASS +values.minusOne * values.minusOne is 1
+PASS values.minusOne * +values.minusOne is values.minusOne * values.minusOne
+PASS values.minusOne * +values.minusOne is 1
+PASS +values.minusOne * +values.minusOne is values.minusOne * values.minusOne
+PASS +values.minusOne * +values.minusOne is 1
+PASS +values.minusOne / values.minusOne is values.minusOne / values.minusOne
+PASS +values.minusOne / values.minusOne is 1
+PASS values.minusOne / +values.minusOne is values.minusOne / values.minusOne
+PASS values.minusOne / +values.minusOne is 1
+PASS +values.minusOne / +values.minusOne is values.minusOne / values.minusOne
+PASS +values.minusOne / +values.minusOne is 1
+PASS +values.minusOne - values.minusOne is values.minusOne - values.minusOne
+PASS +values.minusOne - values.minusOne is 0
+PASS values.minusOne - +values.minusOne is values.minusOne - values.minusOne
+PASS values.minusOne - +values.minusOne is 0
+PASS +values.minusOne - +values.minusOne is values.minusOne - values.minusOne
+PASS +values.minusOne - +values.minusOne is 0
+PASS +values.minusOne * values.zero is values.minusOne * values.zero
+PASS +values.minusOne * values.zero is -0
+PASS values.minusOne * +values.zero is values.minusOne * values.zero
+PASS values.minusOne * +values.zero is -0
+PASS +values.minusOne * +values.zero is values.minusOne * values.zero
+PASS +values.minusOne * +values.zero is -0
+PASS +values.minusOne / values.zero is values.minusOne / values.zero
+PASS +values.minusOne / values.zero is -Infinity
+PASS values.minusOne / +values.zero is values.minusOne / values.zero
+PASS values.minusOne / +values.zero is -Infinity
+PASS +values.minusOne / +values.zero is values.minusOne / values.zero
+PASS +values.minusOne / +values.zero is -Infinity
+PASS +values.minusOne - values.zero is values.minusOne - values.zero
+PASS +values.minusOne - values.zero is -1
+PASS values.minusOne - +values.zero is values.minusOne - values.zero
+PASS values.minusOne - +values.zero is -1
+PASS +values.minusOne - +values.zero is values.minusOne - values.zero
+PASS +values.minusOne - +values.zero is -1
+PASS +values.minusOne * values.minusZero is values.minusOne * values.minusZero
+PASS +values.minusOne * values.minusZero is 0
+PASS values.minusOne * +values.minusZero is values.minusOne * values.minusZero
+PASS values.minusOne * +values.minusZero is 0
+PASS +values.minusOne * +values.minusZero is values.minusOne * values.minusZero
+PASS +values.minusOne * +values.minusZero is 0
+PASS +values.minusOne / values.minusZero is values.minusOne / values.minusZero
+PASS +values.minusOne / values.minusZero is Infinity
+PASS values.minusOne / +values.minusZero is values.minusOne / values.minusZero
+PASS values.minusOne / +values.minusZero is Infinity
+PASS +values.minusOne / +values.minusZero is values.minusOne / values.minusZero
+PASS +values.minusOne / +values.minusZero is Infinity
+PASS +values.minusOne - values.minusZero is values.minusOne - values.minusZero
+PASS +values.minusOne - values.minusZero is -1
+PASS values.minusOne - +values.minusZero is values.minusOne - values.minusZero
+PASS values.minusOne - +values.minusZero is -1
+PASS +values.minusOne - +values.minusZero is values.minusOne - values.minusZero
+PASS +values.minusOne - +values.minusZero is -1
+PASS +values.minusOne * values.infinity is values.minusOne * values.infinity
+PASS +values.minusOne * values.infinity is -Infinity
+PASS values.minusOne * +values.infinity is values.minusOne * values.infinity
+PASS values.minusOne * +values.infinity is -Infinity
+PASS +values.minusOne * +values.infinity is values.minusOne * values.infinity
+PASS +values.minusOne * +values.infinity is -Infinity
+PASS +values.minusOne / values.infinity is values.minusOne / values.infinity
+PASS +values.minusOne / values.infinity is -0
+PASS values.minusOne / +values.infinity is values.minusOne / values.infinity
+PASS values.minusOne / +values.infinity is -0
+PASS +values.minusOne / +values.infinity is values.minusOne / values.infinity
+PASS +values.minusOne / +values.infinity is -0
+PASS +values.minusOne - values.infinity is values.minusOne - values.infinity
+PASS +values.minusOne - values.infinity is -Infinity
+PASS values.minusOne - +values.infinity is values.minusOne - values.infinity
+PASS values.minusOne - +values.infinity is -Infinity
+PASS +values.minusOne - +values.infinity is values.minusOne - values.infinity
+PASS +values.minusOne - +values.infinity is -Infinity
+PASS +values.minusOne * values.minusInfinity is values.minusOne * values.minusInfinity
+PASS +values.minusOne * values.minusInfinity is Infinity
+PASS values.minusOne * +values.minusInfinity is values.minusOne * values.minusInfinity
+PASS values.minusOne * +values.minusInfinity is Infinity
+PASS +values.minusOne * +values.minusInfinity is values.minusOne * values.minusInfinity
+PASS +values.minusOne * +values.minusInfinity is Infinity
+PASS +values.minusOne / values.minusInfinity is values.minusOne / values.minusInfinity
+PASS +values.minusOne / values.minusInfinity is 0
+PASS values.minusOne / +values.minusInfinity is values.minusOne / values.minusInfinity
+PASS values.minusOne / +values.minusInfinity is 0
+PASS +values.minusOne / +values.minusInfinity is values.minusOne / values.minusInfinity
+PASS +values.minusOne / +values.minusInfinity is 0
+PASS +values.minusOne - values.minusInfinity is values.minusOne - values.minusInfinity
+PASS +values.minusOne - values.minusInfinity is Infinity
+PASS values.minusOne - +values.minusInfinity is values.minusOne - values.minusInfinity
+PASS values.minusOne - +values.minusInfinity is Infinity
+PASS +values.minusOne - +values.minusInfinity is values.minusOne - values.minusInfinity
+PASS +values.minusOne - +values.minusInfinity is Infinity
+PASS +values.minusOne * values.notANumber is values.minusOne * values.notANumber
+PASS +values.minusOne * values.notANumber is NaN
+PASS values.minusOne * +values.notANumber is values.minusOne * values.notANumber
+PASS values.minusOne * +values.notANumber is NaN
+PASS +values.minusOne * +values.notANumber is values.minusOne * values.notANumber
+PASS +values.minusOne * +values.notANumber is NaN
+PASS +values.minusOne / values.notANumber is values.minusOne / values.notANumber
+PASS +values.minusOne / values.notANumber is NaN
+PASS values.minusOne / +values.notANumber is values.minusOne / values.notANumber
+PASS values.minusOne / +values.notANumber is NaN
+PASS +values.minusOne / +values.notANumber is values.minusOne / values.notANumber
+PASS +values.minusOne / +values.notANumber is NaN
+PASS +values.minusOne - values.notANumber is values.minusOne - values.notANumber
+PASS +values.minusOne - values.notANumber is NaN
+PASS values.minusOne - +values.notANumber is values.minusOne - values.notANumber
+PASS values.minusOne - +values.notANumber is NaN
+PASS +values.minusOne - +values.notANumber is values.minusOne - values.notANumber
+PASS +values.minusOne - +values.notANumber is NaN
+PASS +values.minusOne * values.nonNumberString is values.minusOne * values.nonNumberString
+PASS +values.minusOne * values.nonNumberString is NaN
+PASS values.minusOne * +values.nonNumberString is values.minusOne * values.nonNumberString
+PASS values.minusOne * +values.nonNumberString is NaN
+PASS +values.minusOne * +values.nonNumberString is values.minusOne * values.nonNumberString
+PASS +values.minusOne * +values.nonNumberString is NaN
+PASS +values.minusOne / values.nonNumberString is values.minusOne / values.nonNumberString
+PASS +values.minusOne / values.nonNumberString is NaN
+PASS values.minusOne / +values.nonNumberString is values.minusOne / values.nonNumberString
+PASS values.minusOne / +values.nonNumberString is NaN
+PASS +values.minusOne / +values.nonNumberString is values.minusOne / values.nonNumberString
+PASS +values.minusOne / +values.nonNumberString is NaN
+PASS +values.minusOne - values.nonNumberString is values.minusOne - values.nonNumberString
+PASS +values.minusOne - values.nonNumberString is NaN
+PASS values.minusOne - +values.nonNumberString is values.minusOne - values.nonNumberString
+PASS values.minusOne - +values.nonNumberString is NaN
+PASS +values.minusOne - +values.nonNumberString is values.minusOne - values.nonNumberString
+PASS +values.minusOne - +values.nonNumberString is NaN
+PASS +values.minusOne * values.someFloatString is values.minusOne * values.someFloatString
+PASS +values.minusOne * values.someFloatString is -42.42
+PASS values.minusOne * +values.someFloatString is values.minusOne * values.someFloatString
+PASS values.minusOne * +values.someFloatString is -42.42
+PASS +values.minusOne * +values.someFloatString is values.minusOne * values.someFloatString
+PASS +values.minusOne * +values.someFloatString is -42.42
+PASS +values.minusOne / values.someFloatString is values.minusOne / values.someFloatString
+PASS +values.minusOne / values.someFloatString is -0.023573785950023574
+PASS values.minusOne / +values.someFloatString is values.minusOne / values.someFloatString
+PASS values.minusOne / +values.someFloatString is -0.023573785950023574
+PASS +values.minusOne / +values.someFloatString is values.minusOne / values.someFloatString
+PASS +values.minusOne / +values.someFloatString is -0.023573785950023574
+PASS +values.minusOne - values.someFloatString is values.minusOne - values.someFloatString
+PASS +values.minusOne - values.someFloatString is -43.42
+PASS values.minusOne - +values.someFloatString is values.minusOne - values.someFloatString
+PASS values.minusOne - +values.someFloatString is -43.42
+PASS +values.minusOne - +values.someFloatString is values.minusOne - values.someFloatString
+PASS +values.minusOne - +values.someFloatString is -43.42
+PASS +values.zero * values.someInt is values.zero * values.someInt
+PASS +values.zero * values.someInt is 0
+PASS values.zero * +values.someInt is values.zero * values.someInt
+PASS values.zero * +values.someInt is 0
+PASS +values.zero * +values.someInt is values.zero * values.someInt
+PASS +values.zero * +values.someInt is 0
+PASS +values.zero / values.someInt is values.zero / values.someInt
+PASS +values.zero / values.someInt is 0
+PASS values.zero / +values.someInt is values.zero / values.someInt
+PASS values.zero / +values.someInt is 0
+PASS +values.zero / +values.someInt is values.zero / values.someInt
+PASS +values.zero / +values.someInt is 0
+PASS +values.zero - values.someInt is values.zero - values.someInt
+PASS +values.zero - values.someInt is -42
+PASS values.zero - +values.someInt is values.zero - values.someInt
+PASS values.zero - +values.someInt is -42
+PASS +values.zero - +values.someInt is values.zero - values.someInt
+PASS +values.zero - +values.someInt is -42
+PASS +values.zero * values.someFloat is values.zero * values.someFloat
+PASS +values.zero * values.someFloat is 0
+PASS values.zero * +values.someFloat is values.zero * values.someFloat
+PASS values.zero * +values.someFloat is 0
+PASS +values.zero * +values.someFloat is values.zero * values.someFloat
+PASS +values.zero * +values.someFloat is 0
+PASS +values.zero / values.someFloat is values.zero / values.someFloat
+PASS +values.zero / values.someFloat is 0
+PASS values.zero / +values.someFloat is values.zero / values.someFloat
+PASS values.zero / +values.someFloat is 0
+PASS +values.zero / +values.someFloat is values.zero / values.someFloat
+PASS +values.zero / +values.someFloat is 0
+PASS +values.zero - values.someFloat is values.zero - values.someFloat
+PASS +values.zero - values.someFloat is -42.42
+PASS values.zero - +values.someFloat is values.zero - values.someFloat
+PASS values.zero - +values.someFloat is -42.42
+PASS +values.zero - +values.someFloat is values.zero - values.someFloat
+PASS +values.zero - +values.someFloat is -42.42
+PASS +values.zero * values.one is values.zero * values.one
+PASS +values.zero * values.one is 0
+PASS values.zero * +values.one is values.zero * values.one
+PASS values.zero * +values.one is 0
+PASS +values.zero * +values.one is values.zero * values.one
+PASS +values.zero * +values.one is 0
+PASS +values.zero / values.one is values.zero / values.one
+PASS +values.zero / values.one is 0
+PASS values.zero / +values.one is values.zero / values.one
+PASS values.zero / +values.one is 0
+PASS +values.zero / +values.one is values.zero / values.one
+PASS +values.zero / +values.one is 0
+PASS +values.zero - values.one is values.zero - values.one
+PASS +values.zero - values.one is -1
+PASS values.zero - +values.one is values.zero - values.one
+PASS values.zero - +values.one is -1
+PASS +values.zero - +values.one is values.zero - values.one
+PASS +values.zero - +values.one is -1
+PASS +values.zero * values.minusOne is values.zero * values.minusOne
+PASS +values.zero * values.minusOne is -0
+PASS values.zero * +values.minusOne is values.zero * values.minusOne
+PASS values.zero * +values.minusOne is -0
+PASS +values.zero * +values.minusOne is values.zero * values.minusOne
+PASS +values.zero * +values.minusOne is -0
+PASS +values.zero / values.minusOne is values.zero / values.minusOne
+PASS +values.zero / values.minusOne is -0
+PASS values.zero / +values.minusOne is values.zero / values.minusOne
+PASS values.zero / +values.minusOne is -0
+PASS +values.zero / +values.minusOne is values.zero / values.minusOne
+PASS +values.zero / +values.minusOne is -0
+PASS +values.zero - values.minusOne is values.zero - values.minusOne
+PASS +values.zero - values.minusOne is 1
+PASS values.zero - +values.minusOne is values.zero - values.minusOne
+PASS values.zero - +values.minusOne is 1
+PASS +values.zero - +values.minusOne is values.zero - values.minusOne
+PASS +values.zero - +values.minusOne is 1
+PASS +values.zero * values.zero is values.zero * values.zero
+PASS +values.zero * values.zero is 0
+PASS values.zero * +values.zero is values.zero * values.zero
+PASS values.zero * +values.zero is 0
+PASS +values.zero * +values.zero is values.zero * values.zero
+PASS +values.zero * +values.zero is 0
+PASS +values.zero / values.zero is values.zero / values.zero
+PASS +values.zero / values.zero is NaN
+PASS values.zero / +values.zero is values.zero / values.zero
+PASS values.zero / +values.zero is NaN
+PASS +values.zero / +values.zero is values.zero / values.zero
+PASS +values.zero / +values.zero is NaN
+PASS +values.zero - values.zero is values.zero - values.zero
+PASS +values.zero - values.zero is 0
+PASS values.zero - +values.zero is values.zero - values.zero
+PASS values.zero - +values.zero is 0
+PASS +values.zero - +values.zero is values.zero - values.zero
+PASS +values.zero - +values.zero is 0
+PASS +values.zero * values.minusZero is values.zero * values.minusZero
+PASS +values.zero * values.minusZero is -0
+PASS values.zero * +values.minusZero is values.zero * values.minusZero
+PASS values.zero * +values.minusZero is -0
+PASS +values.zero * +values.minusZero is values.zero * values.minusZero
+PASS +values.zero * +values.minusZero is -0
+PASS +values.zero / values.minusZero is values.zero / values.minusZero
+PASS +values.zero / values.minusZero is NaN
+PASS values.zero / +values.minusZero is values.zero / values.minusZero
+PASS values.zero / +values.minusZero is NaN
+PASS +values.zero / +values.minusZero is values.zero / values.minusZero
+PASS +values.zero / +values.minusZero is NaN
+PASS +values.zero - values.minusZero is values.zero - values.minusZero
+PASS +values.zero - values.minusZero is 0
+PASS values.zero - +values.minusZero is values.zero - values.minusZero
+PASS values.zero - +values.minusZero is 0
+PASS +values.zero - +values.minusZero is values.zero - values.minusZero
+PASS +values.zero - +values.minusZero is 0
+PASS +values.zero * values.infinity is values.zero * values.infinity
+PASS +values.zero * values.infinity is NaN
+PASS values.zero * +values.infinity is values.zero * values.infinity
+PASS values.zero * +values.infinity is NaN
+PASS +values.zero * +values.infinity is values.zero * values.infinity
+PASS +values.zero * +values.infinity is NaN
+PASS +values.zero / values.infinity is values.zero / values.infinity
+PASS +values.zero / values.infinity is 0
+PASS values.zero / +values.infinity is values.zero / values.infinity
+PASS values.zero / +values.infinity is 0
+PASS +values.zero / +values.infinity is values.zero / values.infinity
+PASS +values.zero / +values.infinity is 0
+PASS +values.zero - values.infinity is values.zero - values.infinity
+PASS +values.zero - values.infinity is -Infinity
+PASS values.zero - +values.infinity is values.zero - values.infinity
+PASS values.zero - +values.infinity is -Infinity
+PASS +values.zero - +values.infinity is values.zero - values.infinity
+PASS +values.zero - +values.infinity is -Infinity
+PASS +values.zero * values.minusInfinity is values.zero * values.minusInfinity
+PASS +values.zero * values.minusInfinity is NaN
+PASS values.zero * +values.minusInfinity is values.zero * values.minusInfinity
+PASS values.zero * +values.minusInfinity is NaN
+PASS +values.zero * +values.minusInfinity is values.zero * values.minusInfinity
+PASS +values.zero * +values.minusInfinity is NaN
+PASS +values.zero / values.minusInfinity is values.zero / values.minusInfinity
+PASS +values.zero / values.minusInfinity is -0
+PASS values.zero / +values.minusInfinity is values.zero / values.minusInfinity
+PASS values.zero / +values.minusInfinity is -0
+PASS +values.zero / +values.minusInfinity is values.zero / values.minusInfinity
+PASS +values.zero / +values.minusInfinity is -0
+PASS +values.zero - values.minusInfinity is values.zero - values.minusInfinity
+PASS +values.zero - values.minusInfinity is Infinity
+PASS values.zero - +values.minusInfinity is values.zero - values.minusInfinity
+PASS values.zero - +values.minusInfinity is Infinity
+PASS +values.zero - +values.minusInfinity is values.zero - values.minusInfinity
+PASS +values.zero - +values.minusInfinity is Infinity
+PASS +values.zero * values.notANumber is values.zero * values.notANumber
+PASS +values.zero * values.notANumber is NaN
+PASS values.zero * +values.notANumber is values.zero * values.notANumber
+PASS values.zero * +values.notANumber is NaN
+PASS +values.zero * +values.notANumber is values.zero * values.notANumber
+PASS +values.zero * +values.notANumber is NaN
+PASS +values.zero / values.notANumber is values.zero / values.notANumber
+PASS +values.zero / values.notANumber is NaN
+PASS values.zero / +values.notANumber is values.zero / values.notANumber
+PASS values.zero / +values.notANumber is NaN
+PASS +values.zero / +values.notANumber is values.zero / values.notANumber
+PASS +values.zero / +values.notANumber is NaN
+PASS +values.zero - values.notANumber is values.zero - values.notANumber
+PASS +values.zero - values.notANumber is NaN
+PASS values.zero - +values.notANumber is values.zero - values.notANumber
+PASS values.zero - +values.notANumber is NaN
+PASS +values.zero - +values.notANumber is values.zero - values.notANumber
+PASS +values.zero - +values.notANumber is NaN
+PASS +values.zero * values.nonNumberString is values.zero * values.nonNumberString
+PASS +values.zero * values.nonNumberString is NaN
+PASS values.zero * +values.nonNumberString is values.zero * values.nonNumberString
+PASS values.zero * +values.nonNumberString is NaN
+PASS +values.zero * +values.nonNumberString is values.zero * values.nonNumberString
+PASS +values.zero * +values.nonNumberString is NaN
+PASS +values.zero / values.nonNumberString is values.zero / values.nonNumberString
+PASS +values.zero / values.nonNumberString is NaN
+PASS values.zero / +values.nonNumberString is values.zero / values.nonNumberString
+PASS values.zero / +values.nonNumberString is NaN
+PASS +values.zero / +values.nonNumberString is values.zero / values.nonNumberString
+PASS +values.zero / +values.nonNumberString is NaN
+PASS +values.zero - values.nonNumberString is values.zero - values.nonNumberString
+PASS +values.zero - values.nonNumberString is NaN
+PASS values.zero - +values.nonNumberString is values.zero - values.nonNumberString
+PASS values.zero - +values.nonNumberString is NaN
+PASS +values.zero - +values.nonNumberString is values.zero - values.nonNumberString
+PASS +values.zero - +values.nonNumberString is NaN
+PASS +values.zero * values.someFloatString is values.zero * values.someFloatString
+PASS +values.zero * values.someFloatString is 0
+PASS values.zero * +values.someFloatString is values.zero * values.someFloatString
+PASS values.zero * +values.someFloatString is 0
+PASS +values.zero * +values.someFloatString is values.zero * values.someFloatString
+PASS +values.zero * +values.someFloatString is 0
+PASS +values.zero / values.someFloatString is values.zero / values.someFloatString
+PASS +values.zero / values.someFloatString is 0
+PASS values.zero / +values.someFloatString is values.zero / values.someFloatString
+PASS values.zero / +values.someFloatString is 0
+PASS +values.zero / +values.someFloatString is values.zero / values.someFloatString
+PASS +values.zero / +values.someFloatString is 0
+PASS +values.zero - values.someFloatString is values.zero - values.someFloatString
+PASS +values.zero - values.someFloatString is -42.42
+PASS values.zero - +values.someFloatString is values.zero - values.someFloatString
+PASS values.zero - +values.someFloatString is -42.42
+PASS +values.zero - +values.someFloatString is values.zero - values.someFloatString
+PASS +values.zero - +values.someFloatString is -42.42
+PASS +values.minusZero * values.someInt is values.minusZero * values.someInt
+PASS +values.minusZero * values.someInt is -0
+PASS values.minusZero * +values.someInt is values.minusZero * values.someInt
+PASS values.minusZero * +values.someInt is -0
+PASS +values.minusZero * +values.someInt is values.minusZero * values.someInt
+PASS +values.minusZero * +values.someInt is -0
+PASS +values.minusZero / values.someInt is values.minusZero / values.someInt
+PASS +values.minusZero / values.someInt is -0
+PASS values.minusZero / +values.someInt is values.minusZero / values.someInt
+PASS values.minusZero / +values.someInt is -0
+PASS +values.minusZero / +values.someInt is values.minusZero / values.someInt
+PASS +values.minusZero / +values.someInt is -0
+PASS +values.minusZero - values.someInt is values.minusZero - values.someInt
+PASS +values.minusZero - values.someInt is -42
+PASS values.minusZero - +values.someInt is values.minusZero - values.someInt
+PASS values.minusZero - +values.someInt is -42
+PASS +values.minusZero - +values.someInt is values.minusZero - values.someInt
+PASS +values.minusZero - +values.someInt is -42
+PASS +values.minusZero * values.someFloat is values.minusZero * values.someFloat
+PASS +values.minusZero * values.someFloat is -0
+PASS values.minusZero * +values.someFloat is values.minusZero * values.someFloat
+PASS values.minusZero * +values.someFloat is -0
+PASS +values.minusZero * +values.someFloat is values.minusZero * values.someFloat
+PASS +values.minusZero * +values.someFloat is -0
+PASS +values.minusZero / values.someFloat is values.minusZero / values.someFloat
+PASS +values.minusZero / values.someFloat is -0
+PASS values.minusZero / +values.someFloat is values.minusZero / values.someFloat
+PASS values.minusZero / +values.someFloat is -0
+PASS +values.minusZero / +values.someFloat is values.minusZero / values.someFloat
+PASS +values.minusZero / +values.someFloat is -0
+PASS +values.minusZero - values.someFloat is values.minusZero - values.someFloat
+PASS +values.minusZero - values.someFloat is -42.42
+PASS values.minusZero - +values.someFloat is values.minusZero - values.someFloat
+PASS values.minusZero - +values.someFloat is -42.42
+PASS +values.minusZero - +values.someFloat is values.minusZero - values.someFloat
+PASS +values.minusZero - +values.someFloat is -42.42
+PASS +values.minusZero * values.one is values.minusZero * values.one
+PASS +values.minusZero * values.one is -0
+PASS values.minusZero * +values.one is values.minusZero * values.one
+PASS values.minusZero * +values.one is -0
+PASS +values.minusZero * +values.one is values.minusZero * values.one
+PASS +values.minusZero * +values.one is -0
+PASS +values.minusZero / values.one is values.minusZero / values.one
+PASS +values.minusZero / values.one is -0
+PASS values.minusZero / +values.one is values.minusZero / values.one
+PASS values.minusZero / +values.one is -0
+PASS +values.minusZero / +values.one is values.minusZero / values.one
+PASS +values.minusZero / +values.one is -0
+PASS +values.minusZero - values.one is values.minusZero - values.one
+PASS +values.minusZero - values.one is -1
+PASS values.minusZero - +values.one is values.minusZero - values.one
+PASS values.minusZero - +values.one is -1
+PASS +values.minusZero - +values.one is values.minusZero - values.one
+PASS +values.minusZero - +values.one is -1
+PASS +values.minusZero * values.minusOne is values.minusZero * values.minusOne
+PASS +values.minusZero * values.minusOne is 0
+PASS values.minusZero * +values.minusOne is values.minusZero * values.minusOne
+PASS values.minusZero * +values.minusOne is 0
+PASS +values.minusZero * +values.minusOne is values.minusZero * values.minusOne
+PASS +values.minusZero * +values.minusOne is 0
+PASS +values.minusZero / values.minusOne is values.minusZero / values.minusOne
+PASS +values.minusZero / values.minusOne is 0
+PASS values.minusZero / +values.minusOne is values.minusZero / values.minusOne
+PASS values.minusZero / +values.minusOne is 0
+PASS +values.minusZero / +values.minusOne is values.minusZero / values.minusOne
+PASS +values.minusZero / +values.minusOne is 0
+PASS +values.minusZero - values.minusOne is values.minusZero - values.minusOne
+PASS +values.minusZero - values.minusOne is 1
+PASS values.minusZero - +values.minusOne is values.minusZero - values.minusOne
+PASS values.minusZero - +values.minusOne is 1
+PASS +values.minusZero - +values.minusOne is values.minusZero - values.minusOne
+PASS +values.minusZero - +values.minusOne is 1
+PASS +values.minusZero * values.zero is values.minusZero * values.zero
+PASS +values.minusZero * values.zero is -0
+PASS values.minusZero * +values.zero is values.minusZero * values.zero
+PASS values.minusZero * +values.zero is -0
+PASS +values.minusZero * +values.zero is values.minusZero * values.zero
+PASS +values.minusZero * +values.zero is -0
+PASS +values.minusZero / values.zero is values.minusZero / values.zero
+PASS +values.minusZero / values.zero is NaN
+PASS values.minusZero / +values.zero is values.minusZero / values.zero
+PASS values.minusZero / +values.zero is NaN
+PASS +values.minusZero / +values.zero is values.minusZero / values.zero
+PASS +values.minusZero / +values.zero is NaN
+PASS +values.minusZero - values.zero is values.minusZero - values.zero
+PASS +values.minusZero - values.zero is -0
+PASS values.minusZero - +values.zero is values.minusZero - values.zero
+PASS values.minusZero - +values.zero is -0
+PASS +values.minusZero - +values.zero is values.minusZero - values.zero
+PASS +values.minusZero - +values.zero is -0
+PASS +values.minusZero * values.minusZero is values.minusZero * values.minusZero
+PASS +values.minusZero * values.minusZero is 0
+PASS values.minusZero * +values.minusZero is values.minusZero * values.minusZero
+PASS values.minusZero * +values.minusZero is 0
+PASS +values.minusZero * +values.minusZero is values.minusZero * values.minusZero
+PASS +values.minusZero * +values.minusZero is 0
+PASS +values.minusZero / values.minusZero is values.minusZero / values.minusZero
+PASS +values.minusZero / values.minusZero is NaN
+PASS values.minusZero / +values.minusZero is values.minusZero / values.minusZero
+PASS values.minusZero / +values.minusZero is NaN
+PASS +values.minusZero / +values.minusZero is values.minusZero / values.minusZero
+PASS +values.minusZero / +values.minusZero is NaN
+PASS +values.minusZero - values.minusZero is values.minusZero - values.minusZero
+PASS +values.minusZero - values.minusZero is 0
+PASS values.minusZero - +values.minusZero is values.minusZero - values.minusZero
+PASS values.minusZero - +values.minusZero is 0
+PASS +values.minusZero - +values.minusZero is values.minusZero - values.minusZero
+PASS +values.minusZero - +values.minusZero is 0
+PASS +values.minusZero * values.infinity is values.minusZero * values.infinity
+PASS +values.minusZero * values.infinity is NaN
+PASS values.minusZero * +values.infinity is values.minusZero * values.infinity
+PASS values.minusZero * +values.infinity is NaN
+PASS +values.minusZero * +values.infinity is values.minusZero * values.infinity
+PASS +values.minusZero * +values.infinity is NaN
+PASS +values.minusZero / values.infinity is values.minusZero / values.infinity
+PASS +values.minusZero / values.infinity is -0
+PASS values.minusZero / +values.infinity is values.minusZero / values.infinity
+PASS values.minusZero / +values.infinity is -0
+PASS +values.minusZero / +values.infinity is values.minusZero / values.infinity
+PASS +values.minusZero / +values.infinity is -0
+PASS +values.minusZero - values.infinity is values.minusZero - values.infinity
+PASS +values.minusZero - values.infinity is -Infinity
+PASS values.minusZero - +values.infinity is values.minusZero - values.infinity
+PASS values.minusZero - +values.infinity is -Infinity
+PASS +values.minusZero - +values.infinity is values.minusZero - values.infinity
+PASS +values.minusZero - +values.infinity is -Infinity
+PASS +values.minusZero * values.minusInfinity is values.minusZero * values.minusInfinity
+PASS +values.minusZero * values.minusInfinity is NaN
+PASS values.minusZero * +values.minusInfinity is values.minusZero * values.minusInfinity
+PASS values.minusZero * +values.minusInfinity is NaN
+PASS +values.minusZero * +values.minusInfinity is values.minusZero * values.minusInfinity
+PASS +values.minusZero * +values.minusInfinity is NaN
+PASS +values.minusZero / values.minusInfinity is values.minusZero / values.minusInfinity
+PASS +values.minusZero / values.minusInfinity is 0
+PASS values.minusZero / +values.minusInfinity is values.minusZero / values.minusInfinity
+PASS values.minusZero / +values.minusInfinity is 0
+PASS +values.minusZero / +values.minusInfinity is values.minusZero / values.minusInfinity
+PASS +values.minusZero / +values.minusInfinity is 0
+PASS +values.minusZero - values.minusInfinity is values.minusZero - values.minusInfinity
+PASS +values.minusZero - values.minusInfinity is Infinity
+PASS values.minusZero - +values.minusInfinity is values.minusZero - values.minusInfinity
+PASS values.minusZero - +values.minusInfinity is Infinity
+PASS +values.minusZero - +values.minusInfinity is values.minusZero - values.minusInfinity
+PASS +values.minusZero - +values.minusInfinity is Infinity
+PASS +values.minusZero * values.notANumber is values.minusZero * values.notANumber
+PASS +values.minusZero * values.notANumber is NaN
+PASS values.minusZero * +values.notANumber is values.minusZero * values.notANumber
+PASS values.minusZero * +values.notANumber is NaN
+PASS +values.minusZero * +values.notANumber is values.minusZero * values.notANumber
+PASS +values.minusZero * +values.notANumber is NaN
+PASS +values.minusZero / values.notANumber is values.minusZero / values.notANumber
+PASS +values.minusZero / values.notANumber is NaN
+PASS values.minusZero / +values.notANumber is values.minusZero / values.notANumber
+PASS values.minusZero / +values.notANumber is NaN
+PASS +values.minusZero / +values.notANumber is values.minusZero / values.notANumber
+PASS +values.minusZero / +values.notANumber is NaN
+PASS +values.minusZero - values.notANumber is values.minusZero - values.notANumber
+PASS +values.minusZero - values.notANumber is NaN
+PASS values.minusZero - +values.notANumber is values.minusZero - values.notANumber
+PASS values.minusZero - +values.notANumber is NaN
+PASS +values.minusZero - +values.notANumber is values.minusZero - values.notANumber
+PASS +values.minusZero - +values.notANumber is NaN
+PASS +values.minusZero * values.nonNumberString is values.minusZero * values.nonNumberString
+PASS +values.minusZero * values.nonNumberString is NaN
+PASS values.minusZero * +values.nonNumberString is values.minusZero * values.nonNumberString
+PASS values.minusZero * +values.nonNumberString is NaN
+PASS +values.minusZero * +values.nonNumberString is values.minusZero * values.nonNumberString
+PASS +values.minusZero * +values.nonNumberString is NaN
+PASS +values.minusZero / values.nonNumberString is values.minusZero / values.nonNumberString
+PASS +values.minusZero / values.nonNumberString is NaN
+PASS values.minusZero / +values.nonNumberString is values.minusZero / values.nonNumberString
+PASS values.minusZero / +values.nonNumberString is NaN
+PASS +values.minusZero / +values.nonNumberString is values.minusZero / values.nonNumberString
+PASS +values.minusZero / +values.nonNumberString is NaN
+PASS +values.minusZero - values.nonNumberString is values.minusZero - values.nonNumberString
+PASS +values.minusZero - values.nonNumberString is NaN
+PASS values.minusZero - +values.nonNumberString is values.minusZero - values.nonNumberString
+PASS values.minusZero - +values.nonNumberString is NaN
+PASS +values.minusZero - +values.nonNumberString is values.minusZero - values.nonNumberString
+PASS +values.minusZero - +values.nonNumberString is NaN
+PASS +values.minusZero * values.someFloatString is values.minusZero * values.someFloatString
+PASS +values.minusZero * values.someFloatString is -0
+PASS values.minusZero * +values.someFloatString is values.minusZero * values.someFloatString
+PASS values.minusZero * +values.someFloatString is -0
+PASS +values.minusZero * +values.someFloatString is values.minusZero * values.someFloatString
+PASS +values.minusZero * +values.someFloatString is -0
+PASS +values.minusZero / values.someFloatString is values.minusZero / values.someFloatString
+PASS +values.minusZero / values.someFloatString is -0
+PASS values.minusZero / +values.someFloatString is values.minusZero / values.someFloatString
+PASS values.minusZero / +values.someFloatString is -0
+PASS +values.minusZero / +values.someFloatString is values.minusZero / values.someFloatString
+PASS +values.minusZero / +values.someFloatString is -0
+PASS +values.minusZero - values.someFloatString is values.minusZero - values.someFloatString
+PASS +values.minusZero - values.someFloatString is -42.42
+PASS values.minusZero - +values.someFloatString is values.minusZero - values.someFloatString
+PASS values.minusZero - +values.someFloatString is -42.42
+PASS +values.minusZero - +values.someFloatString is values.minusZero - values.someFloatString
+PASS +values.minusZero - +values.someFloatString is -42.42
+PASS +values.infinity * values.someInt is values.infinity * values.someInt
+PASS +values.infinity * values.someInt is Infinity
+PASS values.infinity * +values.someInt is values.infinity * values.someInt
+PASS values.infinity * +values.someInt is Infinity
+PASS +values.infinity * +values.someInt is values.infinity * values.someInt
+PASS +values.infinity * +values.someInt is Infinity
+PASS +values.infinity / values.someInt is values.infinity / values.someInt
+PASS +values.infinity / values.someInt is Infinity
+PASS values.infinity / +values.someInt is values.infinity / values.someInt
+PASS values.infinity / +values.someInt is Infinity
+PASS +values.infinity / +values.someInt is values.infinity / values.someInt
+PASS +values.infinity / +values.someInt is Infinity
+PASS +values.infinity - values.someInt is values.infinity - values.someInt
+PASS +values.infinity - values.someInt is Infinity
+PASS values.infinity - +values.someInt is values.infinity - values.someInt
+PASS values.infinity - +values.someInt is Infinity
+PASS +values.infinity - +values.someInt is values.infinity - values.someInt
+PASS +values.infinity - +values.someInt is Infinity
+PASS +values.infinity * values.someFloat is values.infinity * values.someFloat
+PASS +values.infinity * values.someFloat is Infinity
+PASS values.infinity * +values.someFloat is values.infinity * values.someFloat
+PASS values.infinity * +values.someFloat is Infinity
+PASS +values.infinity * +values.someFloat is values.infinity * values.someFloat
+PASS +values.infinity * +values.someFloat is Infinity
+PASS +values.infinity / values.someFloat is values.infinity / values.someFloat
+PASS +values.infinity / values.someFloat is Infinity
+PASS values.infinity / +values.someFloat is values.infinity / values.someFloat
+PASS values.infinity / +values.someFloat is Infinity
+PASS +values.infinity / +values.someFloat is values.infinity / values.someFloat
+PASS +values.infinity / +values.someFloat is Infinity
+PASS +values.infinity - values.someFloat is values.infinity - values.someFloat
+PASS +values.infinity - values.someFloat is Infinity
+PASS values.infinity - +values.someFloat is values.infinity - values.someFloat
+PASS values.infinity - +values.someFloat is Infinity
+PASS +values.infinity - +values.someFloat is values.infinity - values.someFloat
+PASS +values.infinity - +values.someFloat is Infinity
+PASS +values.infinity * values.one is values.infinity * values.one
+PASS +values.infinity * values.one is Infinity
+PASS values.infinity * +values.one is values.infinity * values.one
+PASS values.infinity * +values.one is Infinity
+PASS +values.infinity * +values.one is values.infinity * values.one
+PASS +values.infinity * +values.one is Infinity
+PASS +values.infinity / values.one is values.infinity / values.one
+PASS +values.infinity / values.one is Infinity
+PASS values.infinity / +values.one is values.infinity / values.one
+PASS values.infinity / +values.one is Infinity
+PASS +values.infinity / +values.one is values.infinity / values.one
+PASS +values.infinity / +values.one is Infinity
+PASS +values.infinity - values.one is values.infinity - values.one
+PASS +values.infinity - values.one is Infinity
+PASS values.infinity - +values.one is values.infinity - values.one
+PASS values.infinity - +values.one is Infinity
+PASS +values.infinity - +values.one is values.infinity - values.one
+PASS +values.infinity - +values.one is Infinity
+PASS +values.infinity * values.minusOne is values.infinity * values.minusOne
+PASS +values.infinity * values.minusOne is -Infinity
+PASS values.infinity * +values.minusOne is values.infinity * values.minusOne
+PASS values.infinity * +values.minusOne is -Infinity
+PASS +values.infinity * +values.minusOne is values.infinity * values.minusOne
+PASS +values.infinity * +values.minusOne is -Infinity
+PASS +values.infinity / values.minusOne is values.infinity / values.minusOne
+PASS +values.infinity / values.minusOne is -Infinity
+PASS values.infinity / +values.minusOne is values.infinity / values.minusOne
+PASS values.infinity / +values.minusOne is -Infinity
+PASS +values.infinity / +values.minusOne is values.infinity / values.minusOne
+PASS +values.infinity / +values.minusOne is -Infinity
+PASS +values.infinity - values.minusOne is values.infinity - values.minusOne
+PASS +values.infinity - values.minusOne is Infinity
+PASS values.infinity - +values.minusOne is values.infinity - values.minusOne
+PASS values.infinity - +values.minusOne is Infinity
+PASS +values.infinity - +values.minusOne is values.infinity - values.minusOne
+PASS +values.infinity - +values.minusOne is Infinity
+PASS +values.infinity * values.zero is values.infinity * values.zero
+PASS +values.infinity * values.zero is NaN
+PASS values.infinity * +values.zero is values.infinity * values.zero
+PASS values.infinity * +values.zero is NaN
+PASS +values.infinity * +values.zero is values.infinity * values.zero
+PASS +values.infinity * +values.zero is NaN
+PASS +values.infinity / values.zero is values.infinity / values.zero
+PASS +values.infinity / values.zero is Infinity
+PASS values.infinity / +values.zero is values.infinity / values.zero
+PASS values.infinity / +values.zero is Infinity
+PASS +values.infinity / +values.zero is values.infinity / values.zero
+PASS +values.infinity / +values.zero is Infinity
+PASS +values.infinity - values.zero is values.infinity - values.zero
+PASS +values.infinity - values.zero is Infinity
+PASS values.infinity - +values.zero is values.infinity - values.zero
+PASS values.infinity - +values.zero is Infinity
+PASS +values.infinity - +values.zero is values.infinity - values.zero
+PASS +values.infinity - +values.zero is Infinity
+PASS +values.infinity * values.minusZero is values.infinity * values.minusZero
+PASS +values.infinity * values.minusZero is NaN
+PASS values.infinity * +values.minusZero is values.infinity * values.minusZero
+PASS values.infinity * +values.minusZero is NaN
+PASS +values.infinity * +values.minusZero is values.infinity * values.minusZero
+PASS +values.infinity * +values.minusZero is NaN
+PASS +values.infinity / values.minusZero is values.infinity / values.minusZero
+PASS +values.infinity / values.minusZero is -Infinity
+PASS values.infinity / +values.minusZero is values.infinity / values.minusZero
+PASS values.infinity / +values.minusZero is -Infinity
+PASS +values.infinity / +values.minusZero is values.infinity / values.minusZero
+PASS +values.infinity / +values.minusZero is -Infinity
+PASS +values.infinity - values.minusZero is values.infinity - values.minusZero
+PASS +values.infinity - values.minusZero is Infinity
+PASS values.infinity - +values.minusZero is values.infinity - values.minusZero
+PASS values.infinity - +values.minusZero is Infinity
+PASS +values.infinity - +values.minusZero is values.infinity - values.minusZero
+PASS +values.infinity - +values.minusZero is Infinity
+PASS +values.infinity * values.infinity is values.infinity * values.infinity
+PASS +values.infinity * values.infinity is Infinity
+PASS values.infinity * +values.infinity is values.infinity * values.infinity
+PASS values.infinity * +values.infinity is Infinity
+PASS +values.infinity * +values.infinity is values.infinity * values.infinity
+PASS +values.infinity * +values.infinity is Infinity
+PASS +values.infinity / values.infinity is values.infinity / values.infinity
+PASS +values.infinity / values.infinity is NaN
+PASS values.infinity / +values.infinity is values.infinity / values.infinity
+PASS values.infinity / +values.infinity is NaN
+PASS +values.infinity / +values.infinity is values.infinity / values.infinity
+PASS +values.infinity / +values.infinity is NaN
+PASS +values.infinity - values.infinity is values.infinity - values.infinity
+PASS +values.infinity - values.infinity is NaN
+PASS values.infinity - +values.infinity is values.infinity - values.infinity
+PASS values.infinity - +values.infinity is NaN
+PASS +values.infinity - +values.infinity is values.infinity - values.infinity
+PASS +values.infinity - +values.infinity is NaN
+PASS +values.infinity * values.minusInfinity is values.infinity * values.minusInfinity
+PASS +values.infinity * values.minusInfinity is -Infinity
+PASS values.infinity * +values.minusInfinity is values.infinity * values.minusInfinity
+PASS values.infinity * +values.minusInfinity is -Infinity
+PASS +values.infinity * +values.minusInfinity is values.infinity * values.minusInfinity
+PASS +values.infinity * +values.minusInfinity is -Infinity
+PASS +values.infinity / values.minusInfinity is values.infinity / values.minusInfinity
+PASS +values.infinity / values.minusInfinity is NaN
+PASS values.infinity / +values.minusInfinity is values.infinity / values.minusInfinity
+PASS values.infinity / +values.minusInfinity is NaN
+PASS +values.infinity / +values.minusInfinity is values.infinity / values.minusInfinity
+PASS +values.infinity / +values.minusInfinity is NaN
+PASS +values.infinity - values.minusInfinity is values.infinity - values.minusInfinity
+PASS +values.infinity - values.minusInfinity is Infinity
+PASS values.infinity - +values.minusInfinity is values.infinity - values.minusInfinity
+PASS values.infinity - +values.minusInfinity is Infinity
+PASS +values.infinity - +values.minusInfinity is values.infinity - values.minusInfinity
+PASS +values.infinity - +values.minusInfinity is Infinity
+PASS +values.infinity * values.notANumber is values.infinity * values.notANumber
+PASS +values.infinity * values.notANumber is NaN
+PASS values.infinity * +values.notANumber is values.infinity * values.notANumber
+PASS values.infinity * +values.notANumber is NaN
+PASS +values.infinity * +values.notANumber is values.infinity * values.notANumber
+PASS +values.infinity * +values.notANumber is NaN
+PASS +values.infinity / values.notANumber is values.infinity / values.notANumber
+PASS +values.infinity / values.notANumber is NaN
+PASS values.infinity / +values.notANumber is values.infinity / values.notANumber
+PASS values.infinity / +values.notANumber is NaN
+PASS +values.infinity / +values.notANumber is values.infinity / values.notANumber
+PASS +values.infinity / +values.notANumber is NaN
+PASS +values.infinity - values.notANumber is values.infinity - values.notANumber
+PASS +values.infinity - values.notANumber is NaN
+PASS values.infinity - +values.notANumber is values.infinity - values.notANumber
+PASS values.infinity - +values.notANumber is NaN
+PASS +values.infinity - +values.notANumber is values.infinity - values.notANumber
+PASS +values.infinity - +values.notANumber is NaN
+PASS +values.infinity * values.nonNumberString is values.infinity * values.nonNumberString
+PASS +values.infinity * values.nonNumberString is NaN
+PASS values.infinity * +values.nonNumberString is values.infinity * values.nonNumberString
+PASS values.infinity * +values.nonNumberString is NaN
+PASS +values.infinity * +values.nonNumberString is values.infinity * values.nonNumberString
+PASS +values.infinity * +values.nonNumberString is NaN
+PASS +values.infinity / values.nonNumberString is values.infinity / values.nonNumberString
+PASS +values.infinity / values.nonNumberString is NaN
+PASS values.infinity / +values.nonNumberString is values.infinity / values.nonNumberString
+PASS values.infinity / +values.nonNumberString is NaN
+PASS +values.infinity / +values.nonNumberString is values.infinity / values.nonNumberString
+PASS +values.infinity / +values.nonNumberString is NaN
+PASS +values.infinity - values.nonNumberString is values.infinity - values.nonNumberString
+PASS +values.infinity - values.nonNumberString is NaN
+PASS values.infinity - +values.nonNumberString is values.infinity - values.nonNumberString
+PASS values.infinity - +values.nonNumberString is NaN
+PASS +values.infinity - +values.nonNumberString is values.infinity - values.nonNumberString
+PASS +values.infinity - +values.nonNumberString is NaN
+PASS +values.infinity * values.someFloatString is values.infinity * values.someFloatString
+PASS +values.infinity * values.someFloatString is Infinity
+PASS values.infinity * +values.someFloatString is values.infinity * values.someFloatString
+PASS values.infinity * +values.someFloatString is Infinity
+PASS +values.infinity * +values.someFloatString is values.infinity * values.someFloatString
+PASS +values.infinity * +values.someFloatString is Infinity
+PASS +values.infinity / values.someFloatString is values.infinity / values.someFloatString
+PASS +values.infinity / values.someFloatString is Infinity
+PASS values.infinity / +values.someFloatString is values.infinity / values.someFloatString
+PASS values.infinity / +values.someFloatString is Infinity
+PASS +values.infinity / +values.someFloatString is values.infinity / values.someFloatString
+PASS +values.infinity / +values.someFloatString is Infinity
+PASS +values.infinity - values.someFloatString is values.infinity - values.someFloatString
+PASS +values.infinity - values.someFloatString is Infinity
+PASS values.infinity - +values.someFloatString is values.infinity - values.someFloatString
+PASS values.infinity - +values.someFloatString is Infinity
+PASS +values.infinity - +values.someFloatString is values.infinity - values.someFloatString
+PASS +values.infinity - +values.someFloatString is Infinity
+PASS +values.minusInfinity * values.someInt is values.minusInfinity * values.someInt
+PASS +values.minusInfinity * values.someInt is -Infinity
+PASS values.minusInfinity * +values.someInt is values.minusInfinity * values.someInt
+PASS values.minusInfinity * +values.someInt is -Infinity
+PASS +values.minusInfinity * +values.someInt is values.minusInfinity * values.someInt
+PASS +values.minusInfinity * +values.someInt is -Infinity
+PASS +values.minusInfinity / values.someInt is values.minusInfinity / values.someInt
+PASS +values.minusInfinity / values.someInt is -Infinity
+PASS values.minusInfinity / +values.someInt is values.minusInfinity / values.someInt
+PASS values.minusInfinity / +values.someInt is -Infinity
+PASS +values.minusInfinity / +values.someInt is values.minusInfinity / values.someInt
+PASS +values.minusInfinity / +values.someInt is -Infinity
+PASS +values.minusInfinity - values.someInt is values.minusInfinity - values.someInt
+PASS +values.minusInfinity - values.someInt is -Infinity
+PASS values.minusInfinity - +values.someInt is values.minusInfinity - values.someInt
+PASS values.minusInfinity - +values.someInt is -Infinity
+PASS +values.minusInfinity - +values.someInt is values.minusInfinity - values.someInt
+PASS +values.minusInfinity - +values.someInt is -Infinity
+PASS +values.minusInfinity * values.someFloat is values.minusInfinity * values.someFloat
+PASS +values.minusInfinity * values.someFloat is -Infinity
+PASS values.minusInfinity * +values.someFloat is values.minusInfinity * values.someFloat
+PASS values.minusInfinity * +values.someFloat is -Infinity
+PASS +values.minusInfinity * +values.someFloat is values.minusInfinity * values.someFloat
+PASS +values.minusInfinity * +values.someFloat is -Infinity
+PASS +values.minusInfinity / values.someFloat is values.minusInfinity / values.someFloat
+PASS +values.minusInfinity / values.someFloat is -Infinity
+PASS values.minusInfinity / +values.someFloat is values.minusInfinity / values.someFloat
+PASS values.minusInfinity / +values.someFloat is -Infinity
+PASS +values.minusInfinity / +values.someFloat is values.minusInfinity / values.someFloat
+PASS +values.minusInfinity / +values.someFloat is -Infinity
+PASS +values.minusInfinity - values.someFloat is values.minusInfinity - values.someFloat
+PASS +values.minusInfinity - values.someFloat is -Infinity
+PASS values.minusInfinity - +values.someFloat is values.minusInfinity - values.someFloat
+PASS values.minusInfinity - +values.someFloat is -Infinity
+PASS +values.minusInfinity - +values.someFloat is values.minusInfinity - values.someFloat
+PASS +values.minusInfinity - +values.someFloat is -Infinity
+PASS +values.minusInfinity * values.one is values.minusInfinity * values.one
+PASS +values.minusInfinity * values.one is -Infinity
+PASS values.minusInfinity * +values.one is values.minusInfinity * values.one
+PASS values.minusInfinity * +values.one is -Infinity
+PASS +values.minusInfinity * +values.one is values.minusInfinity * values.one
+PASS +values.minusInfinity * +values.one is -Infinity
+PASS +values.minusInfinity / values.one is values.minusInfinity / values.one
+PASS +values.minusInfinity / values.one is -Infinity
+PASS values.minusInfinity / +values.one is values.minusInfinity / values.one
+PASS values.minusInfinity / +values.one is -Infinity
+PASS +values.minusInfinity / +values.one is values.minusInfinity / values.one
+PASS +values.minusInfinity / +values.one is -Infinity
+PASS +values.minusInfinity - values.one is values.minusInfinity - values.one
+PASS +values.minusInfinity - values.one is -Infinity
+PASS values.minusInfinity - +values.one is values.minusInfinity - values.one
+PASS values.minusInfinity - +values.one is -Infinity
+PASS +values.minusInfinity - +values.one is values.minusInfinity - values.one
+PASS +values.minusInfinity - +values.one is -Infinity
+PASS +values.minusInfinity * values.minusOne is values.minusInfinity * values.minusOne
+PASS +values.minusInfinity * values.minusOne is Infinity
+PASS values.minusInfinity * +values.minusOne is values.minusInfinity * values.minusOne
+PASS values.minusInfinity * +values.minusOne is Infinity
+PASS +values.minusInfinity * +values.minusOne is values.minusInfinity * values.minusOne
+PASS +values.minusInfinity * +values.minusOne is Infinity
+PASS +values.minusInfinity / values.minusOne is values.minusInfinity / values.minusOne
+PASS +values.minusInfinity / values.minusOne is Infinity
+PASS values.minusInfinity / +values.minusOne is values.minusInfinity / values.minusOne
+PASS values.minusInfinity / +values.minusOne is Infinity
+PASS +values.minusInfinity / +values.minusOne is values.minusInfinity / values.minusOne
+PASS +values.minusInfinity / +values.minusOne is Infinity
+PASS +values.minusInfinity - values.minusOne is values.minusInfinity - values.minusOne
+PASS +values.minusInfinity - values.minusOne is -Infinity
+PASS values.minusInfinity - +values.minusOne is values.minusInfinity - values.minusOne
+PASS values.minusInfinity - +values.minusOne is -Infinity
+PASS +values.minusInfinity - +values.minusOne is values.minusInfinity - values.minusOne
+PASS +values.minusInfinity - +values.minusOne is -Infinity
+PASS +values.minusInfinity * values.zero is values.minusInfinity * values.zero
+PASS +values.minusInfinity * values.zero is NaN
+PASS values.minusInfinity * +values.zero is values.minusInfinity * values.zero
+PASS values.minusInfinity * +values.zero is NaN
+PASS +values.minusInfinity * +values.zero is values.minusInfinity * values.zero
+PASS +values.minusInfinity * +values.zero is NaN
+PASS +values.minusInfinity / values.zero is values.minusInfinity / values.zero
+PASS +values.minusInfinity / values.zero is -Infinity
+PASS values.minusInfinity / +values.zero is values.minusInfinity / values.zero
+PASS values.minusInfinity / +values.zero is -Infinity
+PASS +values.minusInfinity / +values.zero is values.minusInfinity / values.zero
+PASS +values.minusInfinity / +values.zero is -Infinity
+PASS +values.minusInfinity - values.zero is values.minusInfinity - values.zero
+PASS +values.minusInfinity - values.zero is -Infinity
+PASS values.minusInfinity - +values.zero is values.minusInfinity - values.zero
+PASS values.minusInfinity - +values.zero is -Infinity
+PASS +values.minusInfinity - +values.zero is values.minusInfinity - values.zero
+PASS +values.minusInfinity - +values.zero is -Infinity
+PASS +values.minusInfinity * values.minusZero is values.minusInfinity * values.minusZero
+PASS +values.minusInfinity * values.minusZero is NaN
+PASS values.minusInfinity * +values.minusZero is values.minusInfinity * values.minusZero
+PASS values.minusInfinity * +values.minusZero is NaN
+PASS +values.minusInfinity * +values.minusZero is values.minusInfinity * values.minusZero
+PASS +values.minusInfinity * +values.minusZero is NaN
+PASS +values.minusInfinity / values.minusZero is values.minusInfinity / values.minusZero
+PASS +values.minusInfinity / values.minusZero is Infinity
+PASS values.minusInfinity / +values.minusZero is values.minusInfinity / values.minusZero
+PASS values.minusInfinity / +values.minusZero is Infinity
+PASS +values.minusInfinity / +values.minusZero is values.minusInfinity / values.minusZero
+PASS +values.minusInfinity / +values.minusZero is Infinity
+PASS +values.minusInfinity - values.minusZero is values.minusInfinity - values.minusZero
+PASS +values.minusInfinity - values.minusZero is -Infinity
+PASS values.minusInfinity - +values.minusZero is values.minusInfinity - values.minusZero
+PASS values.minusInfinity - +values.minusZero is -Infinity
+PASS +values.minusInfinity - +values.minusZero is values.minusInfinity - values.minusZero
+PASS +values.minusInfinity - +values.minusZero is -Infinity
+PASS +values.minusInfinity * values.infinity is values.minusInfinity * values.infinity
+PASS +values.minusInfinity * values.infinity is -Infinity
+PASS values.minusInfinity * +values.infinity is values.minusInfinity * values.infinity
+PASS values.minusInfinity * +values.infinity is -Infinity
+PASS +values.minusInfinity * +values.infinity is values.minusInfinity * values.infinity
+PASS +values.minusInfinity * +values.infinity is -Infinity
+PASS +values.minusInfinity / values.infinity is values.minusInfinity / values.infinity
+PASS +values.minusInfinity / values.infinity is NaN
+PASS values.minusInfinity / +values.infinity is values.minusInfinity / values.infinity
+PASS values.minusInfinity / +values.infinity is NaN
+PASS +values.minusInfinity / +values.infinity is values.minusInfinity / values.infinity
+PASS +values.minusInfinity / +values.infinity is NaN
+PASS +values.minusInfinity - values.infinity is values.minusInfinity - values.infinity
+PASS +values.minusInfinity - values.infinity is -Infinity
+PASS values.minusInfinity - +values.infinity is values.minusInfinity - values.infinity
+PASS values.minusInfinity - +values.infinity is -Infinity
+PASS +values.minusInfinity - +values.infinity is values.minusInfinity - values.infinity
+PASS +values.minusInfinity - +values.infinity is -Infinity
+PASS +values.minusInfinity * values.minusInfinity is values.minusInfinity * values.minusInfinity
+PASS +values.minusInfinity * values.minusInfinity is Infinity
+PASS values.minusInfinity * +values.minusInfinity is values.minusInfinity * values.minusInfinity
+PASS values.minusInfinity * +values.minusInfinity is Infinity
+PASS +values.minusInfinity * +values.minusInfinity is values.minusInfinity * values.minusInfinity
+PASS +values.minusInfinity * +values.minusInfinity is Infinity
+PASS +values.minusInfinity / values.minusInfinity is values.minusInfinity / values.minusInfinity
+PASS +values.minusInfinity / values.minusInfinity is NaN
+PASS values.minusInfinity / +values.minusInfinity is values.minusInfinity / values.minusInfinity
+PASS values.minusInfinity / +values.minusInfinity is NaN
+PASS +values.minusInfinity / +values.minusInfinity is values.minusInfinity / values.minusInfinity
+PASS +values.minusInfinity / +values.minusInfinity is NaN
+PASS +values.minusInfinity - values.minusInfinity is values.minusInfinity - values.minusInfinity
+PASS +values.minusInfinity - values.minusInfinity is NaN
+PASS values.minusInfinity - +values.minusInfinity is values.minusInfinity - values.minusInfinity
+PASS values.minusInfinity - +values.minusInfinity is NaN
+PASS +values.minusInfinity - +values.minusInfinity is values.minusInfinity - values.minusInfinity
+PASS +values.minusInfinity - +values.minusInfinity is NaN
+PASS +values.minusInfinity * values.notANumber is values.minusInfinity * values.notANumber
+PASS +values.minusInfinity * values.notANumber is NaN
+PASS values.minusInfinity * +values.notANumber is values.minusInfinity * values.notANumber
+PASS values.minusInfinity * +values.notANumber is NaN
+PASS +values.minusInfinity * +values.notANumber is values.minusInfinity * values.notANumber
+PASS +values.minusInfinity * +values.notANumber is NaN
+PASS +values.minusInfinity / values.notANumber is values.minusInfinity / values.notANumber
+PASS +values.minusInfinity / values.notANumber is NaN
+PASS values.minusInfinity / +values.notANumber is values.minusInfinity / values.notANumber
+PASS values.minusInfinity / +values.notANumber is NaN
+PASS +values.minusInfinity / +values.notANumber is values.minusInfinity / values.notANumber
+PASS +values.minusInfinity / +values.notANumber is NaN
+PASS +values.minusInfinity - values.notANumber is values.minusInfinity - values.notANumber
+PASS +values.minusInfinity - values.notANumber is NaN
+PASS values.minusInfinity - +values.notANumber is values.minusInfinity - values.notANumber
+PASS values.minusInfinity - +values.notANumber is NaN
+PASS +values.minusInfinity - +values.notANumber is values.minusInfinity - values.notANumber
+PASS +values.minusInfinity - +values.notANumber is NaN
+PASS +values.minusInfinity * values.nonNumberString is values.minusInfinity * values.nonNumberString
+PASS +values.minusInfinity * values.nonNumberString is NaN
+PASS values.minusInfinity * +values.nonNumberString is values.minusInfinity * values.nonNumberString
+PASS values.minusInfinity * +values.nonNumberString is NaN
+PASS +values.minusInfinity * +values.nonNumberString is values.minusInfinity * values.nonNumberString
+PASS +values.minusInfinity * +values.nonNumberString is NaN
+PASS +values.minusInfinity / values.nonNumberString is values.minusInfinity / values.nonNumberString
+PASS +values.minusInfinity / values.nonNumberString is NaN
+PASS values.minusInfinity / +values.nonNumberString is values.minusInfinity / values.nonNumberString
+PASS values.minusInfinity / +values.nonNumberString is NaN
+PASS +values.minusInfinity / +values.nonNumberString is values.minusInfinity / values.nonNumberString
+PASS +values.minusInfinity / +values.nonNumberString is NaN
+PASS +values.minusInfinity - values.nonNumberString is values.minusInfinity - values.nonNumberString
+PASS +values.minusInfinity - values.nonNumberString is NaN
+PASS values.minusInfinity - +values.nonNumberString is values.minusInfinity - values.nonNumberString
+PASS values.minusInfinity - +values.nonNumberString is NaN
+PASS +values.minusInfinity - +values.nonNumberString is values.minusInfinity - values.nonNumberString
+PASS +values.minusInfinity - +values.nonNumberString is NaN
+PASS +values.minusInfinity * values.someFloatString is values.minusInfinity * values.someFloatString
+PASS +values.minusInfinity * values.someFloatString is -Infinity
+PASS values.minusInfinity * +values.someFloatString is values.minusInfinity * values.someFloatString
+PASS values.minusInfinity * +values.someFloatString is -Infinity
+PASS +values.minusInfinity * +values.someFloatString is values.minusInfinity * values.someFloatString
+PASS +values.minusInfinity * +values.someFloatString is -Infinity
+PASS +values.minusInfinity / values.someFloatString is values.minusInfinity / values.someFloatString
+PASS +values.minusInfinity / values.someFloatString is -Infinity
+PASS values.minusInfinity / +values.someFloatString is values.minusInfinity / values.someFloatString
+PASS values.minusInfinity / +values.someFloatString is -Infinity
+PASS +values.minusInfinity / +values.someFloatString is values.minusInfinity / values.someFloatString
+PASS +values.minusInfinity / +values.someFloatString is -Infinity
+PASS +values.minusInfinity - values.someFloatString is values.minusInfinity - values.someFloatString
+PASS +values.minusInfinity - values.someFloatString is -Infinity
+PASS values.minusInfinity - +values.someFloatString is values.minusInfinity - values.someFloatString
+PASS values.minusInfinity - +values.someFloatString is -Infinity
+PASS +values.minusInfinity - +values.someFloatString is values.minusInfinity - values.someFloatString
+PASS +values.minusInfinity - +values.someFloatString is -Infinity
+PASS +values.notANumber * values.someInt is values.notANumber * values.someInt
+PASS +values.notANumber * values.someInt is NaN
+PASS values.notANumber * +values.someInt is values.notANumber * values.someInt
+PASS values.notANumber * +values.someInt is NaN
+PASS +values.notANumber * +values.someInt is values.notANumber * values.someInt
+PASS +values.notANumber * +values.someInt is NaN
+PASS +values.notANumber / values.someInt is values.notANumber / values.someInt
+PASS +values.notANumber / values.someInt is NaN
+PASS values.notANumber / +values.someInt is values.notANumber / values.someInt
+PASS values.notANumber / +values.someInt is NaN
+PASS +values.notANumber / +values.someInt is values.notANumber / values.someInt
+PASS +values.notANumber / +values.someInt is NaN
+PASS +values.notANumber - values.someInt is values.notANumber - values.someInt
+PASS +values.notANumber - values.someInt is NaN
+PASS values.notANumber - +values.someInt is values.notANumber - values.someInt
+PASS values.notANumber - +values.someInt is NaN
+PASS +values.notANumber - +values.someInt is values.notANumber - values.someInt
+PASS +values.notANumber - +values.someInt is NaN
+PASS +values.notANumber * values.someFloat is values.notANumber * values.someFloat
+PASS +values.notANumber * values.someFloat is NaN
+PASS values.notANumber * +values.someFloat is values.notANumber * values.someFloat
+PASS values.notANumber * +values.someFloat is NaN
+PASS +values.notANumber * +values.someFloat is values.notANumber * values.someFloat
+PASS +values.notANumber * +values.someFloat is NaN
+PASS +values.notANumber / values.someFloat is values.notANumber / values.someFloat
+PASS +values.notANumber / values.someFloat is NaN
+PASS values.notANumber / +values.someFloat is values.notANumber / values.someFloat
+PASS values.notANumber / +values.someFloat is NaN
+PASS +values.notANumber / +values.someFloat is values.notANumber / values.someFloat
+PASS +values.notANumber / +values.someFloat is NaN
+PASS +values.notANumber - values.someFloat is values.notANumber - values.someFloat
+PASS +values.notANumber - values.someFloat is NaN
+PASS values.notANumber - +values.someFloat is values.notANumber - values.someFloat
+PASS values.notANumber - +values.someFloat is NaN
+PASS +values.notANumber - +values.someFloat is values.notANumber - values.someFloat
+PASS +values.notANumber - +values.someFloat is NaN
+PASS +values.notANumber * values.one is values.notANumber * values.one
+PASS +values.notANumber * values.one is NaN
+PASS values.notANumber * +values.one is values.notANumber * values.one
+PASS values.notANumber * +values.one is NaN
+PASS +values.notANumber * +values.one is values.notANumber * values.one
+PASS +values.notANumber * +values.one is NaN
+PASS +values.notANumber / values.one is values.notANumber / values.one
+PASS +values.notANumber / values.one is NaN
+PASS values.notANumber / +values.one is values.notANumber / values.one
+PASS values.notANumber / +values.one is NaN
+PASS +values.notANumber / +values.one is values.notANumber / values.one
+PASS +values.notANumber / +values.one is NaN
+PASS +values.notANumber - values.one is values.notANumber - values.one
+PASS +values.notANumber - values.one is NaN
+PASS values.notANumber - +values.one is values.notANumber - values.one
+PASS values.notANumber - +values.one is NaN
+PASS +values.notANumber - +values.one is values.notANumber - values.one
+PASS +values.notANumber - +values.one is NaN
+PASS +values.notANumber * values.minusOne is values.notANumber * values.minusOne
+PASS +values.notANumber * values.minusOne is NaN
+PASS values.notANumber * +values.minusOne is values.notANumber * values.minusOne
+PASS values.notANumber * +values.minusOne is NaN
+PASS +values.notANumber * +values.minusOne is values.notANumber * values.minusOne
+PASS +values.notANumber * +values.minusOne is NaN
+PASS +values.notANumber / values.minusOne is values.notANumber / values.minusOne
+PASS +values.notANumber / values.minusOne is NaN
+PASS values.notANumber / +values.minusOne is values.notANumber / values.minusOne
+PASS values.notANumber / +values.minusOne is NaN
+PASS +values.notANumber / +values.minusOne is values.notANumber / values.minusOne
+PASS +values.notANumber / +values.minusOne is NaN
+PASS +values.notANumber - values.minusOne is values.notANumber - values.minusOne
+PASS +values.notANumber - values.minusOne is NaN
+PASS values.notANumber - +values.minusOne is values.notANumber - values.minusOne
+PASS values.notANumber - +values.minusOne is NaN
+PASS +values.notANumber - +values.minusOne is values.notANumber - values.minusOne
+PASS +values.notANumber - +values.minusOne is NaN
+PASS +values.notANumber * values.zero is values.notANumber * values.zero
+PASS +values.notANumber * values.zero is NaN
+PASS values.notANumber * +values.zero is values.notANumber * values.zero
+PASS values.notANumber * +values.zero is NaN
+PASS +values.notANumber * +values.zero is values.notANumber * values.zero
+PASS +values.notANumber * +values.zero is NaN
+PASS +values.notANumber / values.zero is values.notANumber / values.zero
+PASS +values.notANumber / values.zero is NaN
+PASS values.notANumber / +values.zero is values.notANumber / values.zero
+PASS values.notANumber / +values.zero is NaN
+PASS +values.notANumber / +values.zero is values.notANumber / values.zero
+PASS +values.notANumber / +values.zero is NaN
+PASS +values.notANumber - values.zero is values.notANumber - values.zero
+PASS +values.notANumber - values.zero is NaN
+PASS values.notANumber - +values.zero is values.notANumber - values.zero
+PASS values.notANumber - +values.zero is NaN
+PASS +values.notANumber - +values.zero is values.notANumber - values.zero
+PASS +values.notANumber - +values.zero is NaN
+PASS +values.notANumber * values.minusZero is values.notANumber * values.minusZero
+PASS +values.notANumber * values.minusZero is NaN
+PASS values.notANumber * +values.minusZero is values.notANumber * values.minusZero
+PASS values.notANumber * +values.minusZero is NaN
+PASS +values.notANumber * +values.minusZero is values.notANumber * values.minusZero
+PASS +values.notANumber * +values.minusZero is NaN
+PASS +values.notANumber / values.minusZero is values.notANumber / values.minusZero
+PASS +values.notANumber / values.minusZero is NaN
+PASS values.notANumber / +values.minusZero is values.notANumber / values.minusZero
+PASS values.notANumber / +values.minusZero is NaN
+PASS +values.notANumber / +values.minusZero is values.notANumber / values.minusZero
+PASS +values.notANumber / +values.minusZero is NaN
+PASS +values.notANumber - values.minusZero is values.notANumber - values.minusZero
+PASS +values.notANumber - values.minusZero is NaN
+PASS values.notANumber - +values.minusZero is values.notANumber - values.minusZero
+PASS values.notANumber - +values.minusZero is NaN
+PASS +values.notANumber - +values.minusZero is values.notANumber - values.minusZero
+PASS +values.notANumber - +values.minusZero is NaN
+PASS +values.notANumber * values.infinity is values.notANumber * values.infinity
+PASS +values.notANumber * values.infinity is NaN
+PASS values.notANumber * +values.infinity is values.notANumber * values.infinity
+PASS values.notANumber * +values.infinity is NaN
+PASS +values.notANumber * +values.infinity is values.notANumber * values.infinity
+PASS +values.notANumber * +values.infinity is NaN
+PASS +values.notANumber / values.infinity is values.notANumber / values.infinity
+PASS +values.notANumber / values.infinity is NaN
+PASS values.notANumber / +values.infinity is values.notANumber / values.infinity
+PASS values.notANumber / +values.infinity is NaN
+PASS +values.notANumber / +values.infinity is values.notANumber / values.infinity
+PASS +values.notANumber / +values.infinity is NaN
+PASS +values.notANumber - values.infinity is values.notANumber - values.infinity
+PASS +values.notANumber - values.infinity is NaN
+PASS values.notANumber - +values.infinity is values.notANumber - values.infinity
+PASS values.notANumber - +values.infinity is NaN
+PASS +values.notANumber - +values.infinity is values.notANumber - values.infinity
+PASS +values.notANumber - +values.infinity is NaN
+PASS +values.notANumber * values.minusInfinity is values.notANumber * values.minusInfinity
+PASS +values.notANumber * values.minusInfinity is NaN
+PASS values.notANumber * +values.minusInfinity is values.notANumber * values.minusInfinity
+PASS values.notANumber * +values.minusInfinity is NaN
+PASS +values.notANumber * +values.minusInfinity is values.notANumber * values.minusInfinity
+PASS +values.notANumber * +values.minusInfinity is NaN
+PASS +values.notANumber / values.minusInfinity is values.notANumber / values.minusInfinity
+PASS +values.notANumber / values.minusInfinity is NaN
+PASS values.notANumber / +values.minusInfinity is values.notANumber / values.minusInfinity
+PASS values.notANumber / +values.minusInfinity is NaN
+PASS +values.notANumber / +values.minusInfinity is values.notANumber / values.minusInfinity
+PASS +values.notANumber / +values.minusInfinity is NaN
+PASS +values.notANumber - values.minusInfinity is values.notANumber - values.minusInfinity
+PASS +values.notANumber - values.minusInfinity is NaN
+PASS values.notANumber - +values.minusInfinity is values.notANumber - values.minusInfinity
+PASS values.notANumber - +values.minusInfinity is NaN
+PASS +values.notANumber - +values.minusInfinity is values.notANumber - values.minusInfinity
+PASS +values.notANumber - +values.minusInfinity is NaN
+PASS +values.notANumber * values.notANumber is values.notANumber * values.notANumber
+PASS +values.notANumber * values.notANumber is NaN
+PASS values.notANumber * +values.notANumber is values.notANumber * values.notANumber
+PASS values.notANumber * +values.notANumber is NaN
+PASS +values.notANumber * +values.notANumber is values.notANumber * values.notANumber
+PASS +values.notANumber * +values.notANumber is NaN
+PASS +values.notANumber / values.notANumber is values.notANumber / values.notANumber
+PASS +values.notANumber / values.notANumber is NaN
+PASS values.notANumber / +values.notANumber is values.notANumber / values.notANumber
+PASS values.notANumber / +values.notANumber is NaN
+PASS +values.notANumber / +values.notANumber is values.notANumber / values.notANumber
+PASS +values.notANumber / +values.notANumber is NaN
+PASS +values.notANumber - values.notANumber is values.notANumber - values.notANumber
+PASS +values.notANumber - values.notANumber is NaN
+PASS values.notANumber - +values.notANumber is values.notANumber - values.notANumber
+PASS values.notANumber - +values.notANumber is NaN
+PASS +values.notANumber - +values.notANumber is values.notANumber - values.notANumber
+PASS +values.notANumber - +values.notANumber is NaN
+PASS +values.notANumber * values.nonNumberString is values.notANumber * values.nonNumberString
+PASS +values.notANumber * values.nonNumberString is NaN
+PASS values.notANumber * +values.nonNumberString is values.notANumber * values.nonNumberString
+PASS values.notANumber * +values.nonNumberString is NaN
+PASS +values.notANumber * +values.nonNumberString is values.notANumber * values.nonNumberString
+PASS +values.notANumber * +values.nonNumberString is NaN
+PASS +values.notANumber / values.nonNumberString is values.notANumber / values.nonNumberString
+PASS +values.notANumber / values.nonNumberString is NaN
+PASS values.notANumber / +values.nonNumberString is values.notANumber / values.nonNumberString
+PASS values.notANumber / +values.nonNumberString is NaN
+PASS +values.notANumber / +values.nonNumberString is values.notANumber / values.nonNumberString
+PASS +values.notANumber / +values.nonNumberString is NaN
+PASS +values.notANumber - values.nonNumberString is values.notANumber - values.nonNumberString
+PASS +values.notANumber - values.nonNumberString is NaN
+PASS values.notANumber - +values.nonNumberString is values.notANumber - values.nonNumberString
+PASS values.notANumber - +values.nonNumberString is NaN
+PASS +values.notANumber - +values.nonNumberString is values.notANumber - values.nonNumberString
+PASS +values.notANumber - +values.nonNumberString is NaN
+PASS +values.notANumber * values.someFloatString is values.notANumber * values.someFloatString
+PASS +values.notANumber * values.someFloatString is NaN
+PASS values.notANumber * +values.someFloatString is values.notANumber * values.someFloatString
+PASS values.notANumber * +values.someFloatString is NaN
+PASS +values.notANumber * +values.someFloatString is values.notANumber * values.someFloatString
+PASS +values.notANumber * +values.someFloatString is NaN
+PASS +values.notANumber / values.someFloatString is values.notANumber / values.someFloatString
+PASS +values.notANumber / values.someFloatString is NaN
+PASS values.notANumber / +values.someFloatString is values.notANumber / values.someFloatString
+PASS values.notANumber / +values.someFloatString is NaN
+PASS +values.notANumber / +values.someFloatString is values.notANumber / values.someFloatString
+PASS +values.notANumber / +values.someFloatString is NaN
+PASS +values.notANumber - values.someFloatString is values.notANumber - values.someFloatString
+PASS +values.notANumber - values.someFloatString is NaN
+PASS values.notANumber - +values.someFloatString is values.notANumber - values.someFloatString
+PASS values.notANumber - +values.someFloatString is NaN
+PASS +values.notANumber - +values.someFloatString is values.notANumber - values.someFloatString
+PASS +values.notANumber - +values.someFloatString is NaN
+PASS +values.nonNumberString * values.someInt is values.nonNumberString * values.someInt
+PASS +values.nonNumberString * values.someInt is NaN
+PASS values.nonNumberString * +values.someInt is values.nonNumberString * values.someInt
+PASS values.nonNumberString * +values.someInt is NaN
+PASS +values.nonNumberString * +values.someInt is values.nonNumberString * values.someInt
+PASS +values.nonNumberString * +values.someInt is NaN
+PASS +values.nonNumberString / values.someInt is values.nonNumberString / values.someInt
+PASS +values.nonNumberString / values.someInt is NaN
+PASS values.nonNumberString / +values.someInt is values.nonNumberString / values.someInt
+PASS values.nonNumberString / +values.someInt is NaN
+PASS +values.nonNumberString / +values.someInt is values.nonNumberString / values.someInt
+PASS +values.nonNumberString / +values.someInt is NaN
+PASS +values.nonNumberString - values.someInt is values.nonNumberString - values.someInt
+PASS +values.nonNumberString - values.someInt is NaN
+PASS values.nonNumberString - +values.someInt is values.nonNumberString - values.someInt
+PASS values.nonNumberString - +values.someInt is NaN
+PASS +values.nonNumberString - +values.someInt is values.nonNumberString - values.someInt
+PASS +values.nonNumberString - +values.someInt is NaN
+PASS +values.nonNumberString * values.someFloat is values.nonNumberString * values.someFloat
+PASS +values.nonNumberString * values.someFloat is NaN
+PASS values.nonNumberString * +values.someFloat is values.nonNumberString * values.someFloat
+PASS values.nonNumberString * +values.someFloat is NaN
+PASS +values.nonNumberString * +values.someFloat is values.nonNumberString * values.someFloat
+PASS +values.nonNumberString * +values.someFloat is NaN
+PASS +values.nonNumberString / values.someFloat is values.nonNumberString / values.someFloat
+PASS +values.nonNumberString / values.someFloat is NaN
+PASS values.nonNumberString / +values.someFloat is values.nonNumberString / values.someFloat
+PASS values.nonNumberString / +values.someFloat is NaN
+PASS +values.nonNumberString / +values.someFloat is values.nonNumberString / values.someFloat
+PASS +values.nonNumberString / +values.someFloat is NaN
+PASS +values.nonNumberString - values.someFloat is values.nonNumberString - values.someFloat
+PASS +values.nonNumberString - values.someFloat is NaN
+PASS values.nonNumberString - +values.someFloat is values.nonNumberString - values.someFloat
+PASS values.nonNumberString - +values.someFloat is NaN
+PASS +values.nonNumberString - +values.someFloat is values.nonNumberString - values.someFloat
+PASS +values.nonNumberString - +values.someFloat is NaN
+PASS +values.nonNumberString * values.one is values.nonNumberString * values.one
+PASS +values.nonNumberString * values.one is NaN
+PASS values.nonNumberString * +values.one is values.nonNumberString * values.one
+PASS values.nonNumberString * +values.one is NaN
+PASS +values.nonNumberString * +values.one is values.nonNumberString * values.one
+PASS +values.nonNumberString * +values.one is NaN
+PASS +values.nonNumberString / values.one is values.nonNumberString / values.one
+PASS +values.nonNumberString / values.one is NaN
+PASS values.nonNumberString / +values.one is values.nonNumberString / values.one
+PASS values.nonNumberString / +values.one is NaN
+PASS +values.nonNumberString / +values.one is values.nonNumberString / values.one
+PASS +values.nonNumberString / +values.one is NaN
+PASS +values.nonNumberString - values.one is values.nonNumberString - values.one
+PASS +values.nonNumberString - values.one is NaN
+PASS values.nonNumberString - +values.one is values.nonNumberString - values.one
+PASS values.nonNumberString - +values.one is NaN
+PASS +values.nonNumberString - +values.one is values.nonNumberString - values.one
+PASS +values.nonNumberString - +values.one is NaN
+PASS +values.nonNumberString * values.minusOne is values.nonNumberString * values.minusOne
+PASS +values.nonNumberString * values.minusOne is NaN
+PASS values.nonNumberString * +values.minusOne is values.nonNumberString * values.minusOne
+PASS values.nonNumberString * +values.minusOne is NaN
+PASS +values.nonNumberString * +values.minusOne is values.nonNumberString * values.minusOne
+PASS +values.nonNumberString * +values.minusOne is NaN
+PASS +values.nonNumberString / values.minusOne is values.nonNumberString / values.minusOne
+PASS +values.nonNumberString / values.minusOne is NaN
+PASS values.nonNumberString / +values.minusOne is values.nonNumberString / values.minusOne
+PASS values.nonNumberString / +values.minusOne is NaN
+PASS +values.nonNumberString / +values.minusOne is values.nonNumberString / values.minusOne
+PASS +values.nonNumberString / +values.minusOne is NaN
+PASS +values.nonNumberString - values.minusOne is values.nonNumberString - values.minusOne
+PASS +values.nonNumberString - values.minusOne is NaN
+PASS values.nonNumberString - +values.minusOne is values.nonNumberString - values.minusOne
+PASS values.nonNumberString - +values.minusOne is NaN
+PASS +values.nonNumberString - +values.minusOne is values.nonNumberString - values.minusOne
+PASS +values.nonNumberString - +values.minusOne is NaN
+PASS +values.nonNumberString * values.zero is values.nonNumberString * values.zero
+PASS +values.nonNumberString * values.zero is NaN
+PASS values.nonNumberString * +values.zero is values.nonNumberString * values.zero
+PASS values.nonNumberString * +values.zero is NaN
+PASS +values.nonNumberString * +values.zero is values.nonNumberString * values.zero
+PASS +values.nonNumberString * +values.zero is NaN
+PASS +values.nonNumberString / values.zero is values.nonNumberString / values.zero
+PASS +values.nonNumberString / values.zero is NaN
+PASS values.nonNumberString / +values.zero is values.nonNumberString / values.zero
+PASS values.nonNumberString / +values.zero is NaN
+PASS +values.nonNumberString / +values.zero is values.nonNumberString / values.zero
+PASS +values.nonNumberString / +values.zero is NaN
+PASS +values.nonNumberString - values.zero is values.nonNumberString - values.zero
+PASS +values.nonNumberString - values.zero is NaN
+PASS values.nonNumberString - +values.zero is values.nonNumberString - values.zero
+PASS values.nonNumberString - +values.zero is NaN
+PASS +values.nonNumberString - +values.zero is values.nonNumberString - values.zero
+PASS +values.nonNumberString - +values.zero is NaN
+PASS +values.nonNumberString * values.minusZero is values.nonNumberString * values.minusZero
+PASS +values.nonNumberString * values.minusZero is NaN
+PASS values.nonNumberString * +values.minusZero is values.nonNumberString * values.minusZero
+PASS values.nonNumberString * +values.minusZero is NaN
+PASS +values.nonNumberString * +values.minusZero is values.nonNumberString * values.minusZero
+PASS +values.nonNumberString * +values.minusZero is NaN
+PASS +values.nonNumberString / values.minusZero is values.nonNumberString / values.minusZero
+PASS +values.nonNumberString / values.minusZero is NaN
+PASS values.nonNumberString / +values.minusZero is values.nonNumberString / values.minusZero
+PASS values.nonNumberString / +values.minusZero is NaN
+PASS +values.nonNumberString / +values.minusZero is values.nonNumberString / values.minusZero
+PASS +values.nonNumberString / +values.minusZero is NaN
+PASS +values.nonNumberString - values.minusZero is values.nonNumberString - values.minusZero
+PASS +values.nonNumberString - values.minusZero is NaN
+PASS values.nonNumberString - +values.minusZero is values.nonNumberString - values.minusZero
+PASS values.nonNumberString - +values.minusZero is NaN
+PASS +values.nonNumberString - +values.minusZero is values.nonNumberString - values.minusZero
+PASS +values.nonNumberString - +values.minusZero is NaN
+PASS +values.nonNumberString * values.infinity is values.nonNumberString * values.infinity
+PASS +values.nonNumberString * values.infinity is NaN
+PASS values.nonNumberString * +values.infinity is values.nonNumberString * values.infinity
+PASS values.nonNumberString * +values.infinity is NaN
+PASS +values.nonNumberString * +values.infinity is values.nonNumberString * values.infinity
+PASS +values.nonNumberString * +values.infinity is NaN
+PASS +values.nonNumberString / values.infinity is values.nonNumberString / values.infinity
+PASS +values.nonNumberString / values.infinity is NaN
+PASS values.nonNumberString / +values.infinity is values.nonNumberString / values.infinity
+PASS values.nonNumberString / +values.infinity is NaN
+PASS +values.nonNumberString / +values.infinity is values.nonNumberString / values.infinity
+PASS +values.nonNumberString / +values.infinity is NaN
+PASS +values.nonNumberString - values.infinity is values.nonNumberString - values.infinity
+PASS +values.nonNumberString - values.infinity is NaN
+PASS values.nonNumberString - +values.infinity is values.nonNumberString - values.infinity
+PASS values.nonNumberString - +values.infinity is NaN
+PASS +values.nonNumberString - +values.infinity is values.nonNumberString - values.infinity
+PASS +values.nonNumberString - +values.infinity is NaN
+PASS +values.nonNumberString * values.minusInfinity is values.nonNumberString * values.minusInfinity
+PASS +values.nonNumberString * values.minusInfinity is NaN
+PASS values.nonNumberString * +values.minusInfinity is values.nonNumberString * values.minusInfinity
+PASS values.nonNumberString * +values.minusInfinity is NaN
+PASS +values.nonNumberString * +values.minusInfinity is values.nonNumberString * values.minusInfinity
+PASS +values.nonNumberString * +values.minusInfinity is NaN
+PASS +values.nonNumberString / values.minusInfinity is values.nonNumberString / values.minusInfinity
+PASS +values.nonNumberString / values.minusInfinity is NaN
+PASS values.nonNumberString / +values.minusInfinity is values.nonNumberString / values.minusInfinity
+PASS values.nonNumberString / +values.minusInfinity is NaN
+PASS +values.nonNumberString / +values.minusInfinity is values.nonNumberString / values.minusInfinity
+PASS +values.nonNumberString / +values.minusInfinity is NaN
+PASS +values.nonNumberString - values.minusInfinity is values.nonNumberString - values.minusInfinity
+PASS +values.nonNumberString - values.minusInfinity is NaN
+PASS values.nonNumberString - +values.minusInfinity is values.nonNumberString - values.minusInfinity
+PASS values.nonNumberString - +values.minusInfinity is NaN
+PASS +values.nonNumberString - +values.minusInfinity is values.nonNumberString - values.minusInfinity
+PASS +values.nonNumberString - +values.minusInfinity is NaN
+PASS +values.nonNumberString * values.notANumber is values.nonNumberString * values.notANumber
+PASS +values.nonNumberString * values.notANumber is NaN
+PASS values.nonNumberString * +values.notANumber is values.nonNumberString * values.notANumber
+PASS values.nonNumberString * +values.notANumber is NaN
+PASS +values.nonNumberString * +values.notANumber is values.nonNumberString * values.notANumber
+PASS +values.nonNumberString * +values.notANumber is NaN
+PASS +values.nonNumberString / values.notANumber is values.nonNumberString / values.notANumber
+PASS +values.nonNumberString / values.notANumber is NaN
+PASS values.nonNumberString / +values.notANumber is values.nonNumberString / values.notANumber
+PASS values.nonNumberString / +values.notANumber is NaN
+PASS +values.nonNumberString / +values.notANumber is values.nonNumberString / values.notANumber
+PASS +values.nonNumberString / +values.notANumber is NaN
+PASS +values.nonNumberString - values.notANumber is values.nonNumberString - values.notANumber
+PASS +values.nonNumberString - values.notANumber is NaN
+PASS values.nonNumberString - +values.notANumber is values.nonNumberString - values.notANumber
+PASS values.nonNumberString - +values.notANumber is NaN
+PASS +values.nonNumberString - +values.notANumber is values.nonNumberString - values.notANumber
+PASS +values.nonNumberString - +values.notANumber is NaN
+PASS +values.nonNumberString * values.nonNumberString is values.nonNumberString * values.nonNumberString
+PASS +values.nonNumberString * values.nonNumberString is NaN
+PASS values.nonNumberString * +values.nonNumberString is values.nonNumberString * values.nonNumberString
+PASS values.nonNumberString * +values.nonNumberString is NaN
+PASS +values.nonNumberString * +values.nonNumberString is values.nonNumberString * values.nonNumberString
+PASS +values.nonNumberString * +values.nonNumberString is NaN
+PASS +values.nonNumberString / values.nonNumberString is values.nonNumberString / values.nonNumberString
+PASS +values.nonNumberString / values.nonNumberString is NaN
+PASS values.nonNumberString / +values.nonNumberString is values.nonNumberString / values.nonNumberString
+PASS values.nonNumberString / +values.nonNumberString is NaN
+PASS +values.nonNumberString / +values.nonNumberString is values.nonNumberString / values.nonNumberString
+PASS +values.nonNumberString / +values.nonNumberString is NaN
+PASS +values.nonNumberString - values.nonNumberString is values.nonNumberString - values.nonNumberString
+PASS +values.nonNumberString - values.nonNumberString is NaN
+PASS values.nonNumberString - +values.nonNumberString is values.nonNumberString - values.nonNumberString
+PASS values.nonNumberString - +values.nonNumberString is NaN
+PASS +values.nonNumberString - +values.nonNumberString is values.nonNumberString - values.nonNumberString
+PASS +values.nonNumberString - +values.nonNumberString is NaN
+PASS +values.nonNumberString * values.someFloatString is values.nonNumberString * values.someFloatString
+PASS +values.nonNumberString * values.someFloatString is NaN
+PASS values.nonNumberString * +values.someFloatString is values.nonNumberString * values.someFloatString
+PASS values.nonNumberString * +values.someFloatString is NaN
+PASS +values.nonNumberString * +values.someFloatString is values.nonNumberString * values.someFloatString
+PASS +values.nonNumberString * +values.someFloatString is NaN
+PASS +values.nonNumberString / values.someFloatString is values.nonNumberString / values.someFloatString
+PASS +values.nonNumberString / values.someFloatString is NaN
+PASS values.nonNumberString / +values.someFloatString is values.nonNumberString / values.someFloatString
+PASS values.nonNumberString / +values.someFloatString is NaN
+PASS +values.nonNumberString / +values.someFloatString is values.nonNumberString / values.someFloatString
+PASS +values.nonNumberString / +values.someFloatString is NaN
+PASS +values.nonNumberString - values.someFloatString is values.nonNumberString - values.someFloatString
+PASS +values.nonNumberString - values.someFloatString is NaN
+PASS values.nonNumberString - +values.someFloatString is values.nonNumberString - values.someFloatString
+PASS values.nonNumberString - +values.someFloatString is NaN
+PASS +values.nonNumberString - +values.someFloatString is values.nonNumberString - values.someFloatString
+PASS +values.nonNumberString - +values.someFloatString is NaN
+PASS +values.someFloatString * values.someInt is values.someFloatString * values.someInt
+PASS +values.someFloatString * values.someInt is 1781.64
+PASS values.someFloatString * +values.someInt is values.someFloatString * values.someInt
+PASS values.someFloatString * +values.someInt is 1781.64
+PASS +values.someFloatString * +values.someInt is values.someFloatString * values.someInt
+PASS +values.someFloatString * +values.someInt is 1781.64
+PASS +values.someFloatString / values.someInt is values.someFloatString / values.someInt
+PASS +values.someFloatString / values.someInt is 1.01
+PASS values.someFloatString / +values.someInt is values.someFloatString / values.someInt
+PASS values.someFloatString / +values.someInt is 1.01
+PASS +values.someFloatString / +values.someInt is values.someFloatString / values.someInt
+PASS +values.someFloatString / +values.someInt is 1.01
+PASS +values.someFloatString - values.someInt is values.someFloatString - values.someInt
+PASS +values.someFloatString - values.someInt is 0.4200000000000017
+PASS values.someFloatString - +values.someInt is values.someFloatString - values.someInt
+PASS values.someFloatString - +values.someInt is 0.4200000000000017
+PASS +values.someFloatString - +values.someInt is values.someFloatString - values.someInt
+PASS +values.someFloatString - +values.someInt is 0.4200000000000017
+PASS +values.someFloatString * values.someFloat is values.someFloatString * values.someFloat
+PASS +values.someFloatString * values.someFloat is 1799.4564000000003
+PASS values.someFloatString * +values.someFloat is values.someFloatString * values.someFloat
+PASS values.someFloatString * +values.someFloat is 1799.4564000000003
+PASS +values.someFloatString * +values.someFloat is values.someFloatString * values.someFloat
+PASS +values.someFloatString * +values.someFloat is 1799.4564000000003
+PASS +values.someFloatString / values.someFloat is values.someFloatString / values.someFloat
+PASS +values.someFloatString / values.someFloat is 1
+PASS values.someFloatString / +values.someFloat is values.someFloatString / values.someFloat
+PASS values.someFloatString / +values.someFloat is 1
+PASS +values.someFloatString / +values.someFloat is values.someFloatString / values.someFloat
+PASS +values.someFloatString / +values.someFloat is 1
+PASS +values.someFloatString - values.someFloat is values.someFloatString - values.someFloat
+PASS +values.someFloatString - values.someFloat is 0
+PASS values.someFloatString - +values.someFloat is values.someFloatString - values.someFloat
+PASS values.someFloatString - +values.someFloat is 0
+PASS +values.someFloatString - +values.someFloat is values.someFloatString - values.someFloat
+PASS +values.someFloatString - +values.someFloat is 0
+PASS +values.someFloatString * values.one is values.someFloatString * values.one
+PASS +values.someFloatString * values.one is 42.42
+PASS values.someFloatString * +values.one is values.someFloatString * values.one
+PASS values.someFloatString * +values.one is 42.42
+PASS +values.someFloatString * +values.one is values.someFloatString * values.one
+PASS +values.someFloatString * +values.one is 42.42
+PASS +values.someFloatString / values.one is values.someFloatString / values.one
+PASS +values.someFloatString / values.one is 42.42
+PASS values.someFloatString / +values.one is values.someFloatString / values.one
+PASS values.someFloatString / +values.one is 42.42
+PASS +values.someFloatString / +values.one is values.someFloatString / values.one
+PASS +values.someFloatString / +values.one is 42.42
+PASS +values.someFloatString - values.one is values.someFloatString - values.one
+PASS +values.someFloatString - values.one is 41.42
+PASS values.someFloatString - +values.one is values.someFloatString - values.one
+PASS values.someFloatString - +values.one is 41.42
+PASS +values.someFloatString - +values.one is values.someFloatString - values.one
+PASS +values.someFloatString - +values.one is 41.42
+PASS +values.someFloatString * values.minusOne is values.someFloatString * values.minusOne
+PASS +values.someFloatString * values.minusOne is -42.42
+PASS values.someFloatString * +values.minusOne is values.someFloatString * values.minusOne
+PASS values.someFloatString * +values.minusOne is -42.42
+PASS +values.someFloatString * +values.minusOne is values.someFloatString * values.minusOne
+PASS +values.someFloatString * +values.minusOne is -42.42
+PASS +values.someFloatString / values.minusOne is values.someFloatString / values.minusOne
+PASS +values.someFloatString / values.minusOne is -42.42
+PASS values.someFloatString / +values.minusOne is values.someFloatString / values.minusOne
+PASS values.someFloatString / +values.minusOne is -42.42
+PASS +values.someFloatString / +values.minusOne is values.someFloatString / values.minusOne
+PASS +values.someFloatString / +values.minusOne is -42.42
+PASS +values.someFloatString - values.minusOne is values.someFloatString - values.minusOne
+PASS +values.someFloatString - values.minusOne is 43.42
+PASS values.someFloatString - +values.minusOne is values.someFloatString - values.minusOne
+PASS values.someFloatString - +values.minusOne is 43.42
+PASS +values.someFloatString - +values.minusOne is values.someFloatString - values.minusOne
+PASS +values.someFloatString - +values.minusOne is 43.42
+PASS +values.someFloatString * values.zero is values.someFloatString * values.zero
+PASS +values.someFloatString * values.zero is 0
+PASS values.someFloatString * +values.zero is values.someFloatString * values.zero
+PASS values.someFloatString * +values.zero is 0
+PASS +values.someFloatString * +values.zero is values.someFloatString * values.zero
+PASS +values.someFloatString * +values.zero is 0
+PASS +values.someFloatString / values.zero is values.someFloatString / values.zero
+PASS +values.someFloatString / values.zero is Infinity
+PASS values.someFloatString / +values.zero is values.someFloatString / values.zero
+PASS values.someFloatString / +values.zero is Infinity
+PASS +values.someFloatString / +values.zero is values.someFloatString / values.zero
+PASS +values.someFloatString / +values.zero is Infinity
+PASS +values.someFloatString - values.zero is values.someFloatString - values.zero
+PASS +values.someFloatString - values.zero is 42.42
+PASS values.someFloatString - +values.zero is values.someFloatString - values.zero
+PASS values.someFloatString - +values.zero is 42.42
+PASS +values.someFloatString - +values.zero is values.someFloatString - values.zero
+PASS +values.someFloatString - +values.zero is 42.42
+PASS +values.someFloatString * values.minusZero is values.someFloatString * values.minusZero
+PASS +values.someFloatString * values.minusZero is -0
+PASS values.someFloatString * +values.minusZero is values.someFloatString * values.minusZero
+PASS values.someFloatString * +values.minusZero is -0
+PASS +values.someFloatString * +values.minusZero is values.someFloatString * values.minusZero
+PASS +values.someFloatString * +values.minusZero is -0
+PASS +values.someFloatString / values.minusZero is values.someFloatString / values.minusZero
+PASS +values.someFloatString / values.minusZero is -Infinity
+PASS values.someFloatString / +values.minusZero is values.someFloatString / values.minusZero
+PASS values.someFloatString / +values.minusZero is -Infinity
+PASS +values.someFloatString / +values.minusZero is values.someFloatString / values.minusZero
+PASS +values.someFloatString / +values.minusZero is -Infinity
+PASS +values.someFloatString - values.minusZero is values.someFloatString - values.minusZero
+PASS +values.someFloatString - values.minusZero is 42.42
+PASS values.someFloatString - +values.minusZero is values.someFloatString - values.minusZero
+PASS values.someFloatString - +values.minusZero is 42.42
+PASS +values.someFloatString - +values.minusZero is values.someFloatString - values.minusZero
+PASS +values.someFloatString - +values.minusZero is 42.42
+PASS +values.someFloatString * values.infinity is values.someFloatString * values.infinity
+PASS +values.someFloatString * values.infinity is Infinity
+PASS values.someFloatString * +values.infinity is values.someFloatString * values.infinity
+PASS values.someFloatString * +values.infinity is Infinity
+PASS +values.someFloatString * +values.infinity is values.someFloatString * values.infinity
+PASS +values.someFloatString * +values.infinity is Infinity
+PASS +values.someFloatString / values.infinity is values.someFloatString / values.infinity
+PASS +values.someFloatString / values.infinity is 0
+PASS values.someFloatString / +values.infinity is values.someFloatString / values.infinity
+PASS values.someFloatString / +values.infinity is 0
+PASS +values.someFloatString / +values.infinity is values.someFloatString / values.infinity
+PASS +values.someFloatString / +values.infinity is 0
+PASS +values.someFloatString - values.infinity is values.someFloatString - values.infinity
+PASS +values.someFloatString - values.infinity is -Infinity
+PASS values.someFloatString - +values.infinity is values.someFloatString - values.infinity
+PASS values.someFloatString - +values.infinity is -Infinity
+PASS +values.someFloatString - +values.infinity is values.someFloatString - values.infinity
+PASS +values.someFloatString - +values.infinity is -Infinity
+PASS +values.someFloatString * values.minusInfinity is values.someFloatString * values.minusInfinity
+PASS +values.someFloatString * values.minusInfinity is -Infinity
+PASS values.someFloatString * +values.minusInfinity is values.someFloatString * values.minusInfinity
+PASS values.someFloatString * +values.minusInfinity is -Infinity
+PASS +values.someFloatString * +values.minusInfinity is values.someFloatString * values.minusInfinity
+PASS +values.someFloatString * +values.minusInfinity is -Infinity
+PASS +values.someFloatString / values.minusInfinity is values.someFloatString / values.minusInfinity
+PASS +values.someFloatString / values.minusInfinity is -0
+PASS values.someFloatString / +values.minusInfinity is values.someFloatString / values.minusInfinity
+PASS values.someFloatString / +values.minusInfinity is -0
+PASS +values.someFloatString / +values.minusInfinity is values.someFloatString / values.minusInfinity
+PASS +values.someFloatString / +values.minusInfinity is -0
+PASS +values.someFloatString - values.minusInfinity is values.someFloatString - values.minusInfinity
+PASS +values.someFloatString - values.minusInfinity is Infinity
+PASS values.someFloatString - +values.minusInfinity is values.someFloatString - values.minusInfinity
+PASS values.someFloatString - +values.minusInfinity is Infinity
+PASS +values.someFloatString - +values.minusInfinity is values.someFloatString - values.minusInfinity
+PASS +values.someFloatString - +values.minusInfinity is Infinity
+PASS +values.someFloatString * values.notANumber is values.someFloatString * values.notANumber
+PASS +values.someFloatString * values.notANumber is NaN
+PASS values.someFloatString * +values.notANumber is values.someFloatString * values.notANumber
+PASS values.someFloatString * +values.notANumber is NaN
+PASS +values.someFloatString * +values.notANumber is values.someFloatString * values.notANumber
+PASS +values.someFloatString * +values.notANumber is NaN
+PASS +values.someFloatString / values.notANumber is values.someFloatString / values.notANumber
+PASS +values.someFloatString / values.notANumber is NaN
+PASS values.someFloatString / +values.notANumber is values.someFloatString / values.notANumber
+PASS values.someFloatString / +values.notANumber is NaN
+PASS +values.someFloatString / +values.notANumber is values.someFloatString / values.notANumber
+PASS +values.someFloatString / +values.notANumber is NaN
+PASS +values.someFloatString - values.notANumber is values.someFloatString - values.notANumber
+PASS +values.someFloatString - values.notANumber is NaN
+PASS values.someFloatString - +values.notANumber is values.someFloatString - values.notANumber
+PASS values.someFloatString - +values.notANumber is NaN
+PASS +values.someFloatString - +values.notANumber is values.someFloatString - values.notANumber
+PASS +values.someFloatString - +values.notANumber is NaN
+PASS +values.someFloatString * values.nonNumberString is values.someFloatString * values.nonNumberString
+PASS +values.someFloatString * values.nonNumberString is NaN
+PASS values.someFloatString * +values.nonNumberString is values.someFloatString * values.nonNumberString
+PASS values.someFloatString * +values.nonNumberString is NaN
+PASS +values.someFloatString * +values.nonNumberString is values.someFloatString * values.nonNumberString
+PASS +values.someFloatString * +values.nonNumberString is NaN
+PASS +values.someFloatString / values.nonNumberString is values.someFloatString / values.nonNumberString
+PASS +values.someFloatString / values.nonNumberString is NaN
+PASS values.someFloatString / +values.nonNumberString is values.someFloatString / values.nonNumberString
+PASS values.someFloatString / +values.nonNumberString is NaN
+PASS +values.someFloatString / +values.nonNumberString is values.someFloatString / values.nonNumberString
+PASS +values.someFloatString / +values.nonNumberString is NaN
+PASS +values.someFloatString - values.nonNumberString is values.someFloatString - values.nonNumberString
+PASS +values.someFloatString - values.nonNumberString is NaN
+PASS values.someFloatString - +values.nonNumberString is values.someFloatString - values.nonNumberString
+PASS values.someFloatString - +values.nonNumberString is NaN
+PASS +values.someFloatString - +values.nonNumberString is values.someFloatString - values.nonNumberString
+PASS +values.someFloatString - +values.nonNumberString is NaN
+PASS +values.someFloatString * values.someFloatString is values.someFloatString * values.someFloatString
+PASS +values.someFloatString * values.someFloatString is 1799.4564000000003
+PASS values.someFloatString * +values.someFloatString is values.someFloatString * values.someFloatString
+PASS values.someFloatString * +values.someFloatString is 1799.4564000000003
+PASS +values.someFloatString * +values.someFloatString is values.someFloatString * values.someFloatString
+PASS +values.someFloatString * +values.someFloatString is 1799.4564000000003
+PASS +values.someFloatString / values.someFloatString is values.someFloatString / values.someFloatString
+PASS +values.someFloatString / values.someFloatString is 1
+PASS values.someFloatString / +values.someFloatString is values.someFloatString / values.someFloatString
+PASS values.someFloatString / +values.someFloatString is 1
+PASS +values.someFloatString / +values.someFloatString is values.someFloatString / values.someFloatString
+PASS +values.someFloatString / +values.someFloatString is 1
+PASS +values.someFloatString - values.someFloatString is values.someFloatString - values.someFloatString
+PASS +values.someFloatString - values.someFloatString is 0
+PASS values.someFloatString - +values.someFloatString is values.someFloatString - values.someFloatString
+PASS values.someFloatString - +values.someFloatString is 0
+PASS +values.someFloatString - +values.someFloatString is values.someFloatString - values.someFloatString
+PASS +values.someFloatString - +values.someFloatString is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/math-transforms.js b/test/webkit/math-transforms.js
new file mode 100644 (file)
index 0000000..9d9f8fb
--- /dev/null
@@ -0,0 +1,85 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+"This test checks for potential edge case bugs with certain math transforms involving multiplication by 1 and unary plus."
+
+);
+
+var values = {
+    someInt: 42,
+    someFloat: 42.42,
+    one: 1,
+    minusOne: -1,
+    zero: 0,
+    minusZero: -0,
+    infinity: Infinity,
+    minusInfinity: -Infinity,
+    notANumber: NaN,
+    nonNumberString: "x",
+    someFloatString: "42.42"
+};
+
+var numberForString = {
+    nonNumberString: "notANumber",
+    someFloatString: "someFloat"
+};
+
+for (var name in values) {
+    var numForStr = numberForString[name] ? numberForString[name] : name;
+
+    shouldBe("values." + name + " * 1", "+values." + name);
+    shouldBe("values." + name + " * 1", stringify(values[numForStr]));
+
+    shouldBe("1 * values." + name, "+values." + name);
+    shouldBe("1 * values." + name, stringify(values[numForStr]));
+}
+
+for (var name1 in values) {
+    var numForStr1 = numberForString[name1] ? numberForString[name1] : name1;
+    for (var name2 in values) {
+        var numForStr2 = numberForString[name2] ? numberForString[name2] : name2;
+
+        shouldBe("+values." + name1 + " * values." + name2, "values." + name1 + " * values." + name2);
+        shouldBe("+values." + name1 + " * values." + name2, stringify(values[name1] * values[name2]));
+        shouldBe("values." + name1 + " * +values." + name2, "values." + name1 + " * values." + name2);
+        shouldBe("values." + name1 + " * +values." + name2, stringify(values[name1] * values[name2]));
+        shouldBe("+values." + name1 + " * +values." + name2, "values." + name1 + " * values." + name2);
+        shouldBe("+values." + name1 + " * +values." + name2, stringify(values[name1] * values[name2]));
+
+        shouldBe("+values." + name1 + " / values." + name2, "values." + name1 + " / values." + name2);
+        shouldBe("+values." + name1 + " / values." + name2, stringify(values[name1] / values[name2]));
+        shouldBe("values." + name1 + " / +values." + name2, "values." + name1 + " / values." + name2);
+        shouldBe("values." + name1 + " / +values." + name2, stringify(values[name1] / values[name2]));
+        shouldBe("+values." + name1 + " / +values." + name2, "values." + name1 + " / values." + name2);
+        shouldBe("+values." + name1 + " / +values." + name2, stringify(values[name1] / values[name2]));
+
+        shouldBe("+values." + name1 + " - values." + name2, "values." + name1 + " - values." + name2);
+        shouldBe("+values." + name1 + " - values." + name2, stringify(values[name1] - values[name2]));
+        shouldBe("values." + name1 + " - +values." + name2, "values." + name1 + " - values." + name2);
+        shouldBe("values." + name1 + " - +values." + name2, stringify(values[name1] - values[name2]));
+        shouldBe("+values." + name1 + " - +values." + name2, "values." + name1 + " - values." + name2);
+        shouldBe("+values." + name1 + " - +values." + name2, stringify(values[name1] - values[name2]));
+    }
+}
diff --git a/test/webkit/math.js b/test/webkit/math.js
new file mode 100644 (file)
index 0000000..a84215f
--- /dev/null
@@ -0,0 +1,267 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+"This test checks the behavior of the Math object as described in 15.8 of the language specification."
+
+);
+
+shouldBe("Math.abs(NaN)", "NaN");
+shouldBe("Math.abs(0)", "0");
+shouldBe("Math.abs(-0)", "0");
+shouldBe("Math.abs(1)", "1");
+shouldBe("Math.abs(-1)", "1");
+shouldBe("Math.abs(Number.MIN_VALUE)", "Number.MIN_VALUE");
+shouldBe("Math.abs(-Number.MIN_VALUE)", "Number.MIN_VALUE");
+shouldBe("Math.abs(Number.MAX_VALUE)", "Number.MAX_VALUE");
+shouldBe("Math.abs(-Number.MAX_VALUE)", "Number.MAX_VALUE");
+shouldBe("Math.abs(Infinity)", "Infinity");
+shouldBe("Math.abs(-Infinity)", "Infinity");
+
+shouldBe("Math.acos(NaN)", "NaN");
+shouldBe("Math.acos(-0)", "Math.acos(0)");
+shouldBe("Math.acos(1)", "0");
+shouldBe("Math.acos(1.1)", "NaN");
+shouldBe("Math.acos(-1.1)", "NaN");
+shouldBe("Math.acos(Infinity)", "NaN");
+shouldBe("Math.acos(-Infinity)", "NaN");
+
+shouldBe("Math.asin(NaN)", "NaN");
+shouldBe("Math.asin(0)", "0");
+shouldBe("Math.asin(-0)", "-0");
+shouldBe("Math.asin(1)", "-Math.asin(-1)");
+shouldBe("Math.asin(1.1)", "NaN");
+shouldBe("Math.asin(-1.1)", "NaN");
+shouldBe("Math.asin(Infinity)", "NaN");
+shouldBe("Math.asin(-Infinity)", "NaN");
+
+shouldBe("Math.atan(NaN)", "NaN");
+shouldBe("Math.atan(0)", "0");
+shouldBe("Math.atan(-0)", "-0");
+shouldBe("Math.atan(Infinity)", "-Math.atan(-Infinity)");
+
+shouldBe("Math.atan2(NaN, NaN)", "NaN");
+shouldBe("Math.atan2(NaN, 0)", "NaN");
+shouldBe("Math.atan2(NaN, -0)", "NaN");
+shouldBe("Math.atan2(NaN, 1)", "NaN");
+shouldBe("Math.atan2(NaN, Infinity)", "NaN");
+shouldBe("Math.atan2(NaN, -Infinity)", "NaN");
+shouldBe("Math.atan2(0, NaN)", "NaN");
+shouldBe("Math.atan2(-0, NaN)", "NaN");
+shouldBe("Math.atan2(1, NaN)", "NaN");
+shouldBe("Math.atan2(Infinity, NaN)", "NaN");
+shouldBe("Math.atan2(-Infinity, NaN)", "NaN");
+
+// Regression test for Bug 26978 (https://bugs.webkit.org/show_bug.cgi?id=26978)
+var testStr = "";
+var v = { valueOf: function() { testStr += "one"; return 1; } };
+var w = { valueOf: function() { testStr += "two"; return 2; } };
+Math.atan2(v, w);
+shouldBe('testStr', '\"onetwo\"');
+
+/*
+• Ify>0andxis+0, theresult isanimplementation-dependent approximationto +π/2.
+• Ify>0andxis−0, theresult isanimplementation-dependent approximationto +π/2.
+• Ifyis+0andx>0, theresult is+0.
+• Ifyis+0andxis+0, theresult is+0.
+• Ifyis+0andxis−0, theresult isanimplementation-dependent approximationto +π.
+• Ifyis+0andx<0, theresult isanimplementation-dependent approximationto +π.
+• Ifyis−0andx>0, theresult is−0.
+• Ifyis−0andxis+0, theresult is−0.
+• Ifyis−0andxis−0, theresult isanimplementation-dependent approximationto −π.
+• Ifyis−0andx<0, theresult isanimplementation-dependent approximationto −π.
+• Ify<0andxis+0, theresult isanimplementation-dependent approximationto −π/2.
+• Ify<0andxis−0, theresult isanimplementation-dependent approximationto −π/2.
+• Ify>0andyisfiniteandxis+∞, theresult is+0.
+• Ify>0andyisfiniteandxis−∞, theresult ifanimplementation-dependent approximationto +π.
+• Ify<0andyisfiniteandxis+∞, theresult is−0.
+• Ify<0andyisfiniteandxis−∞, theresult isanimplementation-dependent approximationto−π.
+• Ifyis+∞andxisfinite, theresult isanimplementation-dependent approximationto +π/2.
+• Ifyis−∞andxisfinite, theresult isanimplementation-dependent approximationto −π/2.
+• Ifyis+∞andxis+∞, theresult isanimplementation-dependent approximationto +π/4.
+• Ifyis+∞andxis−∞, theresult isanimplementation-dependent approximationto +3π/4.
+• Ifyis−∞andxis+∞, theresult isanimplementation-dependent approximationto −π/4.
+• Ifyis−∞andxis−∞, theresult isanimplementation-dependent approximationto −3π/4.
+*/
+
+shouldBe("Math.ceil(NaN)", "NaN");
+shouldBe("Math.ceil(0)", "0");
+shouldBe("Math.ceil(-0)", "-0");
+shouldBe("Math.ceil(-0.5)", "-0");
+shouldBe("Math.ceil(1)", "1");
+shouldBe("Math.ceil(-1)", "-1");
+shouldBe("Math.ceil(1.1)", "2");
+shouldBe("Math.ceil(-1.1)", "-1");
+shouldBe("Math.ceil(Number.MIN_VALUE)", "1");
+shouldBe("Math.ceil(-Number.MIN_VALUE)", "-0");
+shouldBe("Math.ceil(Number.MAX_VALUE)", "Number.MAX_VALUE");
+shouldBe("Math.ceil(-Number.MAX_VALUE)", "-Number.MAX_VALUE");
+shouldBe("Math.ceil(Infinity)", "Infinity");
+shouldBe("Math.ceil(-Infinity)", "-Infinity");
+
+shouldBe("Math.cos(NaN)", "NaN");
+shouldBe("Math.cos(0)", "1");
+shouldBe("Math.cos(-0)", "1");
+shouldBe("Math.cos(Infinity)", "NaN");
+shouldBe("Math.cos(-Infinity)", "NaN");
+
+shouldBe("Math.exp(NaN)", "NaN");
+shouldBe("Math.exp(0)", "1");
+shouldBe("Math.exp(-0)", "1");
+shouldBe("Math.exp(Infinity)", "Infinity");
+shouldBe("Math.exp(-Infinity)", "0");
+
+shouldBe("Math.floor(NaN)", "NaN");
+shouldBe("Math.floor(0)", "0");
+shouldBe("Math.floor(-0)", "-0");
+shouldBe("Math.floor(0.5)", "0");
+shouldBe("Math.floor(1)", "1");
+shouldBe("Math.floor(-1)", "-1");
+shouldBe("Math.floor(1.1)", "1");
+shouldBe("Math.floor(-1.1)", "-2");
+shouldBe("Math.floor(Number.MIN_VALUE)", "0");
+shouldBe("Math.floor(-Number.MIN_VALUE)", "-1");
+shouldBe("Math.floor(Number.MAX_VALUE)", "Number.MAX_VALUE");
+shouldBe("Math.floor(-Number.MAX_VALUE)", "-Number.MAX_VALUE");
+shouldBe("Math.floor(Infinity)", "Infinity");
+shouldBe("Math.floor(-Infinity)", "-Infinity");
+
+shouldBe("Math.log(NaN)", "NaN");
+shouldBe("Math.log(0)", "-Infinity");
+shouldBe("Math.log(-0)", "-Infinity");
+shouldBe("Math.log(1)", "0");
+shouldBe("Math.log(-1)", "NaN");
+shouldBe("Math.log(-1.1)", "NaN");
+shouldBe("Math.log(Infinity)", "Infinity");
+shouldBe("Math.log(-Infinity)", "NaN");
+
+shouldBe("Math.max()", "-Infinity");
+shouldBe("Math.max(NaN)", "NaN");
+shouldBe("Math.max(NaN,1)", "NaN");
+shouldBe("Math.max(0)", "0");
+shouldBe("Math.max(-0)", "-0");
+shouldBe("Math.max(-0, 0)", "0");
+
+shouldBe("Math.min()", "Infinity");
+shouldBe("Math.min(NaN)", "NaN");
+shouldBe("Math.min(NaN,1)", "NaN");
+shouldBe("Math.min(0)", "0");
+shouldBe("Math.min(-0)", "-0");
+shouldBe("Math.min(-0, 0)", "-0");
+
+shouldBe("Math.pow(NaN, NaN)", "NaN");
+shouldBe("Math.pow(NaN, 0)", "1");
+shouldBe("Math.pow(NaN, -0)", "1");
+shouldBe("Math.pow(NaN, 1)", "NaN");
+shouldBe("Math.pow(NaN, Infinity)", "NaN");
+shouldBe("Math.pow(NaN, -Infinity)", "NaN");
+shouldBe("Math.pow(0, NaN)", "NaN");
+shouldBe("Math.pow(-0, NaN)", "NaN");
+shouldBe("Math.pow(1, NaN)", "NaN");
+shouldBe("Math.pow(Infinity, NaN)", "NaN");
+shouldBe("Math.pow(-Infinity, NaN)", "NaN");
+
+/*
+• Ifabs(x)>1andyis+∞, theresult is+∞.
+• Ifabs(x)>1andyis−∞, theresult is+0.
+• Ifabs(x)==1andyis+∞, theresult isNaN.
+• Ifabs(x)==1andyis−∞, theresult isNaN.
+• Ifabs(x)<1andyis+∞, theresult is+0.
+• Ifabs(x)<1andyis−∞, theresult is+∞.
+• Ifxis+∞andy>0, theresult is+∞.
+• Ifxis+∞andy<0, theresult is+0.
+• Ifxis−∞andy>0andyisanoddinteger, theresult is−∞.
+• Ifxis−∞andy>0andyisnot anoddinteger, theresult is+∞.
+• Ifxis−∞andy<0andyisanoddinteger, theresult is−0.
+• Ifxis−∞andy<0andyisnot anoddinteger, theresult is+0.
+• Ifxis+0andy>0, theresult is+0.
+• Ifxis+0andy<0, theresult is+∞.
+• Ifxis−0andy>0andyisanoddinteger, theresult is−0.
+• Ifxis−0andy>0andyisnot anoddinteger, theresult is+0.
+• Ifxis−0andy<0andyisanoddinteger, theresult is−∞.
+• Ifxis−0andy<0andyisnot anoddinteger, theresult is+∞.
+• Ifx<0andxisfiniteandyisfiniteandyisnot aninteger, theresult isNaN.
+*/
+
+shouldBe("Math.round(NaN)", "NaN");
+shouldBe("Math.round(0)", "0");
+shouldBe("Math.round(-0)", "-0");
+shouldBe("Math.round(0.4)", "0");
+shouldBe("Math.round(-0.4)", "-0");
+shouldBe("Math.round(0.5)", "1");
+shouldBe("Math.round(-0.5)", "-0");
+shouldBe("Math.round(0.6)", "1");
+shouldBe("Math.round(-0.6)", "-1");
+shouldBe("Math.round(1)", "1");
+shouldBe("Math.round(-1)", "-1");
+shouldBe("Math.round(1.1)", "1");
+shouldBe("Math.round(-1.1)", "-1");
+shouldBe("Math.round(1.5)", "2");
+shouldBe("Math.round(-1.5)", "-1");
+shouldBe("Math.round(1.6)", "2");
+shouldBe("Math.round(-1.6)", "-2");
+shouldBe("Math.round(8640000000000000)", "8640000000000000");
+// The following is expected. Double can't represent .5 in this case.
+shouldBe("Math.round(8640000000000000.5)", "8640000000000000");
+shouldBe("Math.round(8640000000000001)", "8640000000000001");
+shouldBe("Math.round(8640000000000002)", "8640000000000002");
+shouldBe("Math.round(9007199254740990)", "9007199254740990");
+shouldBe("Math.round(9007199254740991)", "9007199254740991");
+shouldBe("Math.round(1.7976931348623157e+308)", "1.7976931348623157e+308");
+shouldBe("Math.round(-8640000000000000)", "-8640000000000000");
+shouldBe("Math.round(-8640000000000001)", "-8640000000000001");
+shouldBe("Math.round(-8640000000000002)", "-8640000000000002");
+shouldBe("Math.round(-9007199254740990)", "-9007199254740990");
+shouldBe("Math.round(-9007199254740991)", "-9007199254740991");
+shouldBe("Math.round(-1.7976931348623157e+308)", "-1.7976931348623157e+308");
+shouldBe("Math.round(Infinity)", "Infinity");
+shouldBe("Math.round(-Infinity)", "-Infinity");
+
+shouldBe("Math.sin(NaN)", "NaN");
+shouldBe("Math.sin(0)", "0");
+shouldBe("Math.sin(-0)", "-0");
+shouldBe("Math.sin(Infinity)", "NaN");
+shouldBe("Math.sin(-Infinity)", "NaN");
+
+shouldBe("Math.sqrt(NaN)", "NaN");
+shouldBe("Math.sqrt(0)", "0");
+shouldBe("Math.sqrt(-0)", "-0");
+shouldBe("Math.sqrt(1)", "1");
+shouldBe("Math.sqrt(-1)", "NaN");
+shouldBe("Math.sqrt(Infinity)", "Infinity");
+shouldBe("Math.sqrt(-Infinity)", "NaN");
+
+shouldBe("Math.tan(NaN)", "NaN");
+shouldBe("Math.tan(0)", "0");
+shouldBe("Math.tan(-0)", "-0");
+shouldBe("Math.tan(Infinity)", "NaN");
+shouldBe("Math.tan(-Infinity)", "NaN");
+
+var __Math = Math;
+shouldBeTrue("delete Math;");
+
+function global() { return this; }
+shouldBeFalse("'Math' in global()");
+
+Math = __Math;
diff --git a/test/webkit/mod-by-zero-expected.txt b/test/webkit/mod-by-zero-expected.txt
new file mode 100644 (file)
index 0000000..4e792ba
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that modulo with zero does not crash but returns NaN.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS mod(0) is NaN
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/mod-by-zero.js b/test/webkit/mod-by-zero.js
new file mode 100644 (file)
index 0000000..e3c51dd
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that modulo with zero does not crash but returns NaN."
+);
+
+function mod(b) {
+    return b%b;
+}
+
+shouldBeNaN("mod(0)");
diff --git a/test/webkit/mod-crash-expected.txt b/test/webkit/mod-crash-expected.txt
new file mode 100644 (file)
index 0000000..9c27b34
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that n % 0 doesn't crash with a floating-point exception.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 2 % 0 is NaN
+PASS n % 0 is NaN
+PASS f() is NaN
+PASS g() is NaN
+PASS nonSpeculativeModReuse(0.5) is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/mod-crash.js b/test/webkit/mod-crash.js
new file mode 100644 (file)
index 0000000..2bc01a1
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that n % 0 doesn't crash with a floating-point exception."
+);
+
+shouldBe("2 % 0", "NaN");
+
+var n = 2;
+shouldBe("n % 0", "NaN");
+
+function f()
+{
+    return 2 % 0;
+}
+
+shouldBe("f()", "NaN");
+
+function g()
+{
+    var n = 2;
+    return n % 0;
+}
+
+shouldBe("g()", "NaN");
+
+// Test that reusing a floating point value after use in a modulus works correctly.
+function nonSpeculativeModReuseInner(argument, o1, o2)
+{
+         // The + operator on objects is a reliable way to avoid the speculative JIT path for now at least.
+    o1 + o2;
+
+    var knownDouble = argument - 0;
+    return knownDouble % 1 + knownDouble;
+}
+function nonSpeculativeModReuse(argument)
+{
+    return nonSpeculativeModReuseInner(argument, {}, {});
+}
+
+shouldBe("nonSpeculativeModReuse(0.5)", "1");
diff --git a/test/webkit/multiline-comment-newline-expected.txt b/test/webkit/multiline-comment-newline-expected.txt
new file mode 100644 (file)
index 0000000..3e81ba9
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that a multiline comment containing a newline is converted to a line terminator token.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS shouldBeUndefined is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/multiline-comment-newline.js b/test/webkit/multiline-comment-newline.js
new file mode 100644 (file)
index 0000000..8bad733
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that a multiline comment containing a newline is converted to a line terminator token."
+);
+
+var shouldBeUndefined = (function(){
+  return/*
+  */1
+})();
+
+shouldBe('shouldBeUndefined', 'undefined');
diff --git a/test/webkit/named-function-expression-expected.txt b/test/webkit/named-function-expression-expected.txt
new file mode 100644 (file)
index 0000000..4846470
--- /dev/null
@@ -0,0 +1,64 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests variable resolution rules for named function expressions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+anonymous function expression
+PASS var x = (function(a,b){ return a + b; }); x(1,2) is 3
+named function expression
+PASS var x = (function Named(a,b){ return a + b; }); x(2,3) is 5
+eval'd code should be able to access scoped variables
+PASS var z = 6; var x = eval('(function(a,b){ return a + b + z; })'); x(3,4) is 13
+eval'd code + self-check
+PASS var z = 10; var x = eval('(function Named(a,b){ return (!!Named) ? (a + b + z) : -999; })'); x(4,5) is 19
+named function expressions are not saved in the current context
+PASS (function Foo(){ return 1; }); try { Foo(); throw "FuncExpr was stored"; } catch(e) { if(typeof(e)=="string") throw e; } 1 is 1
+recursion is possible, though
+PASS var ctr = 3; var x = (function Named(a,b){ if(--ctr) return 2 * Named(a,b); else return a + b; }); x(5,6) is 44
+regression test where kjs regarded an anonymous function declaration (which is illegal) as a FunctionExpr
+PASS var hadError = 0; try { eval("function(){ return 2; };"); } catch(e) { hadError = 1; }; hadError; is 1
+
+-----
+
+PASS: (function closure() { return closure == arguments.callee && !this.closure; })() should be true and is.
+PASS: (function closure() { closure = 1; return closure == arguments.callee && !this.closure; })() should be true and is.
+PASS: (function closure(closure) { return closure == 1 && !this.closure; })(1) should be true and is.
+PASS: (function closure() { var closure = 1; return closure == 1 && !this.closure; })() should be true and is.
+PASS: (function closure() { function closure() { }; return closure != arguments.callee && !this.closure; })() should be true and is.
+PASS: (function closure() { return (function() { return closure && !this.closure; })(); })() should be true and is.
+PASS: (function closure() { return (function() { closure = null; return closure && !this.closure; })(); })() should be true and is.
+PASS: (function closure() { return (function() { return closure && !this.closure; }); })()() should be true and is.
+PASS: (function closure() { return (function() { closure = null; return closure && !this.closure; }); })()() should be true and is.
+PASS: (function closure() { eval("var closure"); return closure == undefined && !this.closure; })() should be true and is.
+PASS: (function closure() { eval("function closure() { }"); return closure != arguments.callee && !this.closure; })() should be true and is.
+PASS: (function closure() { eval("var closure;"); closure = 1; return closure == 1 && !this.closure; })() should be true and is.
+PASS: (function closure() { eval("var closure"); delete closure; return closure == arguments.callee && !this.closure; })() should be true and is.
+PASS: (function closure() { eval("function closure() { }"); delete closure; return closure == arguments.callee && !this.closure; })() should be true and is.
+PASS: (function closure() { eval("closure = 1;"); return closure == arguments.callee && !this.closure; })() should be true and is.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/named-function-expression.js b/test/webkit/named-function-expression.js
new file mode 100644 (file)
index 0000000..ecfbb90
--- /dev/null
@@ -0,0 +1,151 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests variable resolution rules for named function expressions."
+);
+
+function Call(lambda) { return lambda(); }
+
+debug("anonymous function expression");
+shouldBe("var x = (function(a,b){ return a + b; }); x(1,2)", "3");
+
+debug("named function expression");
+shouldBe("var x = (function Named(a,b){ return a + b; }); x(2,3)", "5");
+
+debug("eval'd code should be able to access scoped variables");
+shouldBe("var z = 6; var x = eval('(function(a,b){ return a + b + z; })'); x(3,4)", "13");
+
+debug("eval'd code + self-check");
+shouldBe("var z = 10; var x = eval('(function Named(a,b){ return (!!Named) ? (a + b + z) : -999; })'); x(4,5)", "19");
+
+debug("named function expressions are not saved in the current context");
+shouldBe('(function Foo(){ return 1; }); try { Foo(); throw "FuncExpr was stored"; } catch(e) { if(typeof(e)=="string") throw e; } 1', "1");
+
+debug("recursion is possible, though");
+shouldBe("var ctr = 3; var x = (function Named(a,b){ if(--ctr) return 2 * Named(a,b); else return a + b; }); x(5,6)", "44");
+
+debug("regression test where kjs regarded an anonymous function declaration (which is illegal) as a FunctionExpr");
+shouldBe('var hadError = 0; try { eval("function(){ return 2; };"); } catch(e) { hadError = 1; }; hadError;', "1");
+
+debug("\n-----\n");
+
+function shouldBeTrueWithDescription(x, xDescription)
+{
+        if (x) {
+                debug("PASS: " + xDescription + " should be true and is.");
+                return;
+        }
+
+        debug("FAIL: " + xDescription + " should be true but isn't.");
+}
+
+// Recursion.
+shouldBeTrueWithDescription(
+        (function closure() { return closure == arguments.callee && !this.closure; })(),
+        "(function closure() { return closure == arguments.callee && !this.closure; })()"
+);
+
+// Assignment.
+shouldBeTrueWithDescription(
+        (function closure() { closure = 1; return closure == arguments.callee && !this.closure; })(),
+        "(function closure() { closure = 1; return closure == arguments.callee && !this.closure; })()"
+);
+
+// Function name vs parameter.
+shouldBeTrueWithDescription(
+        (function closure(closure) { return closure == 1 && !this.closure; })(1),
+        "(function closure(closure) { return closure == 1 && !this.closure; })(1)"
+);
+
+// Function name vs var.
+shouldBeTrueWithDescription(
+        (function closure() { var closure = 1; return closure == 1 && !this.closure; })(),
+        "(function closure() { var closure = 1; return closure == 1 && !this.closure; })()"
+);
+
+// Function name vs declared function.
+shouldBeTrueWithDescription(
+        (function closure() { function closure() { }; return closure != arguments.callee && !this.closure; })(),
+        "(function closure() { function closure() { }; return closure != arguments.callee && !this.closure; })()"
+);
+
+// Resolve before tear-off.
+shouldBeTrueWithDescription(
+        (function closure() { return (function() { return closure && !this.closure; })(); })(),
+        "(function closure() { return (function() { return closure && !this.closure; })(); })()"
+);
+
+// Resolve assignment before tear-off.
+shouldBeTrueWithDescription(
+        (function closure() { return (function() { closure = null; return closure && !this.closure; })(); })(),
+        "(function closure() { return (function() { closure = null; return closure && !this.closure; })(); })()"
+);
+
+// Resolve after tear-off.
+shouldBeTrueWithDescription(
+        (function closure() { return (function() { return closure && !this.closure; }); })()(),
+        "(function closure() { return (function() { return closure && !this.closure; }); })()()"
+);
+
+// Resolve assignment after tear-off.
+shouldBeTrueWithDescription(
+        (function closure() { return (function() { closure = null; return closure && !this.closure; }); })()(),
+        "(function closure() { return (function() { closure = null; return closure && !this.closure; }); })()()"
+);
+
+// Eval var shadowing (should overwrite).
+shouldBeTrueWithDescription(
+        (function closure() { eval("var closure"); return closure == undefined && !this.closure; })(),
+        "(function closure() { eval(\"var closure\"); return closure == undefined && !this.closure; })()"
+);
+
+// Eval function shadowing (should overwrite).
+shouldBeTrueWithDescription(
+        (function closure() { eval("function closure() { }"); return closure != arguments.callee && !this.closure; })(),
+        "(function closure() { eval(\"function closure() { }\"); return closure != arguments.callee && !this.closure; })()"
+);
+
+// Eval shadowing (should overwrite), followed by put (should overwrite).
+shouldBeTrueWithDescription(
+        (function closure() { eval("var closure;"); closure = 1; return closure == 1 && !this.closure; })(),
+        "(function closure() { eval(\"var closure;\"); closure = 1; return closure == 1 && !this.closure; })()"
+);
+
+// Eval var shadowing, followed by delete (should not overwrite).
+shouldBeTrueWithDescription(
+        (function closure() { eval("var closure"); delete closure; return closure == arguments.callee && !this.closure; })(),
+        "(function closure() { eval(\"var closure\"); delete closure; return closure == arguments.callee && !this.closure; })()"
+);
+
+// Eval function shadowing, followed by delete (should not overwrite).
+shouldBeTrueWithDescription(
+        (function closure() { eval("function closure() { }"); delete closure; return closure == arguments.callee && !this.closure; })(),
+        "(function closure() { eval(\"function closure() { }\"); delete closure; return closure == arguments.callee && !this.closure; })()"
+);
+
+// Eval assignment (should not overwrite).
+shouldBeTrueWithDescription(
+        (function closure() { eval("closure = 1;"); return closure == arguments.callee && !this.closure; })(),
+        "(function closure() { eval(\"closure = 1;\"); return closure == arguments.callee && !this.closure; })()"
+);
diff --git a/test/webkit/nested-functions-expected.txt b/test/webkit/nested-functions-expected.txt
new file mode 100644 (file)
index 0000000..2afe465
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test ensures that properties of nested function code are not lost (due to cached function info).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS passed1 is true
+PASS passed2 is true
+PASS passed3 is true
+PASS passed4 is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/nested-functions.js b/test/webkit/nested-functions.js
new file mode 100644 (file)
index 0000000..b421143
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test ensures that properties of nested function code are not lost (due to cached function info)."
+);
+
+var passed1 = false;
+var passed2 = false;
+var passed3 = false;
+var passed4 = false;
+
+// Test cases deliberately nested!
+function runTests() {
+    // Formating of these functions is significant for regression
+    // testing; functions with small bodies are not cached!
+    function test1() { return this; }
+    function test2() { "use strict"; return this; }
+    function test3() {
+        return this ? "OKAY" : "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
+    }
+    function test4() {
+        "use strict";
+        return !this ? "OKAY" : "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
+    }
+
+    passed1 = test1() === this;
+    passed2 = test2() === undefined;
+    passed3 = test3() === "OKAY";
+    passed4 = test4() === "OKAY";
+};
+
+runTests();
+shouldBeTrue("passed1");
+shouldBeTrue("passed2");
+shouldBeTrue("passed3");
+shouldBeTrue("passed4");
diff --git a/test/webkit/new-array-double-with-holes-expected.txt b/test/webkit/new-array-double-with-holes-expected.txt
new file mode 100644 (file)
index 0000000..50fddf8
--- /dev/null
@@ -0,0 +1,132 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that if array allocation profiling causes a new_array to allocate double arrays, then the holes end up being correctly initialized.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS foo([, 1.5], 0) is void 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/new-array-double-with-holes.js b/test/webkit/new-array-double-with-holes.js
new file mode 100644 (file)
index 0000000..208fc91
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that if array allocation profiling causes a new_array to allocate double arrays, then the holes end up being correctly initialized."
+);
+
+function foo(array, i) {
+    return array[i];
+}
+
+for (var i = 0; i < 100; ++i)
+    shouldBe("foo([, 1.5], 0)", "void 0");
+
diff --git a/test/webkit/no-semi-insertion-at-end-of-script-expected.txt b/test/webkit/no-semi-insertion-at-end-of-script-expected.txt
new file mode 100644 (file)
index 0000000..0540da1
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to make sure we don't automatically insert semicolons at the end of a script.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS if (0) threw exception SyntaxError: Unexpected end of input.
+PASS eval('if (0)') threw exception SyntaxError: Unexpected end of input.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/no-semi-insertion-at-end-of-script.js b/test/webkit/no-semi-insertion-at-end-of-script.js
new file mode 100644 (file)
index 0000000..8af4eac
--- /dev/null
@@ -0,0 +1,27 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to make sure we don't automatically insert semicolons at the end of a script.");
+
+shouldThrow("if (0)");
+shouldThrow("eval('if (0)')");
diff --git a/test/webkit/number-cell-reuse-expected.txt b/test/webkit/number-cell-reuse-expected.txt
new file mode 100644 (file)
index 0000000..2aa0a27
--- /dev/null
@@ -0,0 +1,44 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks corner cases of the number cell reuse code. In particular, it checks for known cases where code generation for number cell reuse caused assertions to fail.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS leftConstantRightSimple(2) is 0.4
+PASS leftConstantRightComplex(1) is 0.2
+PASS leftSimpleRightConstant(2) is 0.4
+PASS leftComplexRightConstant(1) is 0.2
+PASS leftThisRightSimple(2) is NaN
+PASS leftThisRightSimple.call(2, 2) is 8
+PASS leftThisRightComplex(2) is NaN
+PASS leftThisRightComplex.call(2, 2) is 12
+PASS leftSimpleRightThis(2) is NaN
+PASS leftSimpleRightThis.call(2, 2) is 8
+PASS leftComplexRightThis(2) is NaN
+PASS leftComplexRightThis.call(2, 2) is 12
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/number-cell-reuse.js b/test/webkit/number-cell-reuse.js
new file mode 100644 (file)
index 0000000..5b1002f
--- /dev/null
@@ -0,0 +1,86 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks corner cases of the number cell reuse code. In particular, it checks for known cases where code generation for number cell reuse caused assertions to fail."
+);
+
+function leftConstantRightSimple(a)
+{
+    return 0.1 * (a * a);
+}
+
+shouldBe("leftConstantRightSimple(2)", "0.4");
+
+function leftConstantRightComplex(a)
+{
+    return 0.1 * (a * a + a);
+}
+
+shouldBe("leftConstantRightComplex(1)", "0.2");
+
+function leftSimpleRightConstant(a)
+{
+    return (a * a) * 0.1;
+}
+
+shouldBe("leftSimpleRightConstant(2)", "0.4");
+
+function leftComplexRightConstant(a)
+{
+    return (a * a + a) * 0.1;
+}
+
+shouldBe("leftComplexRightConstant(1)", "0.2");
+
+function leftThisRightSimple(a)
+{
+    return this * (a * a);
+}
+
+shouldBeNaN("leftThisRightSimple(2)");
+shouldBe("leftThisRightSimple.call(2, 2)", "8");
+
+function leftThisRightComplex(a)
+{
+    return this * (a * a + a);
+}
+
+shouldBeNaN("leftThisRightComplex(2)");
+shouldBe("leftThisRightComplex.call(2, 2)", "12");
+
+function leftSimpleRightThis(a)
+{
+    return (a * a) * this;
+}
+
+shouldBeNaN("leftSimpleRightThis(2)");
+shouldBe("leftSimpleRightThis.call(2, 2)", "8");
+
+function leftComplexRightThis(a)
+{
+    return (a * a + a) * this;
+}
+
+shouldBeNaN("leftComplexRightThis(2)");
+shouldBe("leftComplexRightThis.call(2, 2)", "12");
diff --git a/test/webkit/number-parsing-crash-expected.txt b/test/webkit/number-parsing-crash-expected.txt
new file mode 100644 (file)
index 0000000..7f179bb
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests edge cases of number parsing.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS x.toString() is "0.1111111111111111"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/number-parsing-crash.js b/test/webkit/number-parsing-crash.js
new file mode 100644 (file)
index 0000000..bdc0596
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests edge cases of number parsing."
+);
+
+var x = 0.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111;
+
+shouldBe("x.toString()", '"0.1111111111111111"');
diff --git a/test/webkit/number-toExponential-expected.txt b/test/webkit/number-toExponential-expected.txt
new file mode 100644 (file)
index 0000000..1f104ba
--- /dev/null
@@ -0,0 +1,60 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+PASS (0.0).toExponential(4) is "0.0000e+0"
+PASS (-0.0).toExponential(4) is "0.0000e+0"
+PASS (0.0).toExponential() is "0e+0"
+PASS (-0.0).toExponential() is "0e+0"
+PASS (123.456).toExponential() is "1.23456e+2"
+PASS (123.456).toExponential(0) is "1e+2"
+PASS (123.456).toExponential(null) is "1e+2"
+PASS (123.456).toExponential(false) is "1e+2"
+PASS (123.456).toExponential('foo') is "1e+2"
+PASS (123.456).toExponential(nan) is "1e+2"
+PASS (123.456).toExponential(1) is "1.2e+2"
+PASS (123.456).toExponential(true) is "1.2e+2"
+PASS (123.456).toExponential('1') is "1.2e+2"
+PASS (123.456).toExponential(2) is "1.23e+2"
+PASS (123.456).toExponential(2.9) is "1.23e+2"
+PASS (123.456).toExponential(3) is "1.235e+2"
+PASS (123.456).toExponential(5) is "1.23456e+2"
+PASS (123.456).toExponential(6) is "1.234560e+2"
+PASS (123.456).toExponential(20) is "1.23456000000000003070e+2"
+PASS (123.456).toExponential(21) threw exception RangeError: toExponential() argument must be between 0 and 20.
+PASS (123.456).toExponential(100) threw exception RangeError: toExponential() argument must be between 0 and 20.
+PASS (123.456).toExponential(101) threw exception RangeError: toExponential() argument must be between 0 and 20.
+PASS (123.456).toExponential(-1) threw exception RangeError: toExponential() argument must be between 0 and 20.
+PASS (1234.567).toExponential(posInf) threw exception RangeError: toExponential() argument must be between 0 and 20.
+PASS (1234.567).toExponential(negInf) threw exception RangeError: toExponential() argument must be between 0 and 20.
+PASS posInf.toExponential() is "Infinity"
+PASS negInf.toExponential() is "-Infinity"
+PASS nan.toExponential() is "NaN"
+PASS (0.01).toExponential() is "1e-2"
+PASS (0.1).toExponential() is "1e-1"
+PASS (0.9).toExponential() is "9e-1"
+PASS (0.9999).toExponential() is "9.999e-1"
+PASS (0.9999).toExponential(2) is "1.00e+0"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/number-toExponential.js b/test/webkit/number-toExponential.js
new file mode 100644 (file)
index 0000000..3e86e8e
--- /dev/null
@@ -0,0 +1,71 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+var posInf = 1/0;
+var negInf = -1/0;
+var nan = 0/0;
+
+// From Acid3, http://bugs.webkit.org/show_bug.cgi?id=16640
+shouldBeEqualToString("(0.0).toExponential(4)", "0.0000e+0");
+shouldBeEqualToString("(-0.0).toExponential(4)", "0.0000e+0");
+shouldBeEqualToString("(0.0).toExponential()", "0e+0");
+shouldBeEqualToString("(-0.0).toExponential()", "0e+0");
+// From http://bugs.webkit.org/show_bug.cgi?id=5259
+shouldBeEqualToString("(123.456).toExponential()", "1.23456e+2");
+shouldBeEqualToString("(123.456).toExponential(0)", "1e+2");
+// 0 equivilents
+shouldBeEqualToString("(123.456).toExponential(null)", "1e+2");
+shouldBeEqualToString("(123.456).toExponential(false)", "1e+2");
+shouldBeEqualToString("(123.456).toExponential('foo')", "1e+2");
+shouldBeEqualToString("(123.456).toExponential(nan)", "1e+2"); // nan is treated like 0
+
+shouldBeEqualToString("(123.456).toExponential(1)", "1.2e+2");
+// 1 equivilents
+shouldBeEqualToString("(123.456).toExponential(true)", "1.2e+2"); // just like 1
+shouldBeEqualToString("(123.456).toExponential('1')", "1.2e+2");
+
+shouldBeEqualToString("(123.456).toExponential(2)", "1.23e+2");
+shouldBeEqualToString("(123.456).toExponential(2.9)", "1.23e+2");
+shouldBeEqualToString("(123.456).toExponential(3)", "1.235e+2");
+shouldBeEqualToString("(123.456).toExponential(5)", "1.23456e+2");
+shouldBeEqualToString("(123.456).toExponential(6)", "1.234560e+2");
+shouldBeEqualToString("(123.456).toExponential(20)", "1.23456000000000003070e+2");
+
+// SpiderMonkey allows precision values 0 to 100, we only allow 0 to 20 currently
+shouldThrow("(123.456).toExponential(21)");
+shouldThrow("(123.456).toExponential(100)");
+shouldThrow("(123.456).toExponential(101)");
+shouldThrow("(123.456).toExponential(-1)");
+
+shouldThrow("(1234.567).toExponential(posInf)");
+shouldThrow("(1234.567).toExponential(negInf)");
+
+shouldBeEqualToString("posInf.toExponential()", "Infinity");
+shouldBeEqualToString("negInf.toExponential()", "-Infinity");
+shouldBeEqualToString("nan.toExponential()", "NaN");
+
+shouldBeEqualToString("(0.01).toExponential()", "1e-2");
+shouldBeEqualToString("(0.1).toExponential()", "1e-1");
+shouldBeEqualToString("(0.9).toExponential()", "9e-1");
+shouldBeEqualToString("(0.9999).toExponential()", "9.999e-1");
+shouldBeEqualToString("(0.9999).toExponential(2)", "1.00e+0");
diff --git a/test/webkit/numeric-compare-expected.txt b/test/webkit/numeric-compare-expected.txt
new file mode 100644 (file)
index 0000000..984db7a
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that compiling a numeric comparison function does not crash
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/numeric-compare.js b/test/webkit/numeric-compare.js
new file mode 100644 (file)
index 0000000..3334a44
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests that compiling a numeric comparison function does not crash'
+);
+
+var a, b;
+(function () { return a - b; })();
diff --git a/test/webkit/numeric-conversion-expected.txt b/test/webkit/numeric-conversion-expected.txt
new file mode 100644 (file)
index 0000000..05c6337
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for accuracy in numeric conversions, particularly with large or infinite values.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Number(1152921504606847105).toString() is '1152921504606847200'
+PASS parseInt('1152921504606847105').toString() is '1152921504606847200'
+PASS (- (- '1152921504606847105')).toString() is '1152921504606847200'
+PASS Number(0x1000000000000081).toString(16) is '1000000000000100'
+PASS parseInt('0x1000000000000081', 16).toString(16) is '1000000000000100'
+PASS (- (- '0x1000000000000081')).toString(16) is '1000000000000100'
+PASS Number(0100000000000000000201).toString(8) is '100000000000000000400'
+PASS parseInt('100000000000000000201', 8).toString(8) is '100000000000000000400'
+PASS (- 'infinity').toString() is 'NaN'
+PASS parseInt('1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000').toString() is 'Infinity'
+PASS parseInt('0x100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 16).toString() is 'Infinity'
+PASS parseInt('100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 8).toString() is 'Infinity'
+PASS parseInt('9007199254740992e2000').toString() is '9007199254740992'
+PASS parseInt('9007199254740992.0e2000').toString() is '9007199254740992'
+PASS parseInt(NaN) is NaN
+PASS parseInt(-Infinity) is NaN
+PASS parseInt(Infinity) is NaN
+PASS parseInt(-0.6).toString() is '0'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/numeric-conversion.js b/test/webkit/numeric-conversion.js
new file mode 100644 (file)
index 0000000..628a472
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks for accuracy in numeric conversions, particularly with large or infinite values."
+);
+
+shouldBe("Number(1152921504606847105).toString()", "'1152921504606847200'");
+shouldBe("parseInt('1152921504606847105').toString()", "'1152921504606847200'");
+shouldBe("(- (- '1152921504606847105')).toString()", "'1152921504606847200'");
+
+shouldBe("Number(0x1000000000000081).toString(16)", "'1000000000000100'");
+shouldBe("parseInt('0x1000000000000081', 16).toString(16)", "'1000000000000100'");
+shouldBe("(- (- '0x1000000000000081')).toString(16)", "'1000000000000100'");
+
+shouldBe("Number(0100000000000000000201).toString(8)", "'100000000000000000400'");
+shouldBe("parseInt('100000000000000000201', 8).toString(8)", "'100000000000000000400'");
+
+shouldBe("(- 'infinity').toString()", "'NaN'");
+
+shouldBe("parseInt('1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000').toString()", "'Infinity'");
+shouldBe("parseInt('0x100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 16).toString()", "'Infinity'");
+shouldBe("parseInt('100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 8).toString()", "'Infinity'");
+
+shouldBe("parseInt('9007199254740992e2000').toString()", "'9007199254740992'");
+shouldBe("parseInt('9007199254740992.0e2000').toString()", "'9007199254740992'");
+
+shouldBe("parseInt(NaN)", "NaN");
+shouldBe("parseInt(-Infinity)", "NaN");
+shouldBe("parseInt(Infinity)", "NaN");
+
+shouldBe("parseInt(-0.6).toString()", "'0'");
diff --git a/test/webkit/object-literal-direct-put-expected.txt b/test/webkit/object-literal-direct-put-expected.txt
new file mode 100644 (file)
index 0000000..46793d2
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test ensures that properties on an object literal are put directly onto the created object, and don't call setters in the prototype chain.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS ({a:true}).a is true
+PASS ({__proto__: {a:false}, a:true}).a is true
+PASS ({__proto__: {set a() {throw 'Should not call setter'; }}, a:true}).a is true
+PASS ({__proto__: {get a() {throw 'Should not reach getter'; }}, a:true}).a is true
+PASS ({__proto__: {get a() {throw 'Should not reach getter'; }, b:true}, a:true}).b is true
+PASS ({__proto__: {__proto__: {a:false}}, a:true}).a is true
+PASS ({__proto__: {__proto__: {set a() {throw 'Should not call setter'; }}}, a:true}).a is true
+PASS ({__proto__: {__proto__: {get a() {throw 'Should not reach getter'; }}}, a:true}).a is true
+PASS ({__proto__: {__proto__: {get a() {throw 'Should not reach getter'; }, b:true}}, a:true}).b is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/object-literal-direct-put.js b/test/webkit/object-literal-direct-put.js
new file mode 100644 (file)
index 0000000..69c085f
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This test ensures that properties on an object literal are put directly onto the created object, and don't call setters in the prototype chain.");
+
+shouldBeTrue("({a:true}).a");
+shouldBeTrue("({__proto__: {a:false}, a:true}).a");
+shouldBeTrue("({__proto__: {set a() {throw 'Should not call setter'; }}, a:true}).a");
+shouldBeTrue("({__proto__: {get a() {throw 'Should not reach getter'; }}, a:true}).a");
+shouldBeTrue("({__proto__: {get a() {throw 'Should not reach getter'; }, b:true}, a:true}).b");
+
+shouldBeTrue("({__proto__: {__proto__: {a:false}}, a:true}).a");
+shouldBeTrue("({__proto__: {__proto__: {set a() {throw 'Should not call setter'; }}}, a:true}).a");
+shouldBeTrue("({__proto__: {__proto__: {get a() {throw 'Should not reach getter'; }}}, a:true}).a");
+shouldBeTrue("({__proto__: {__proto__: {get a() {throw 'Should not reach getter'; }, b:true}}, a:true}).b");
diff --git a/test/webkit/object-literal-syntax-expected.txt b/test/webkit/object-literal-syntax-expected.txt
new file mode 100644 (file)
index 0000000..13b3499
--- /dev/null
@@ -0,0 +1,52 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Make sure that we correctly identify parse errors in object literals
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS ({a:1, get a(){}}) threw exception SyntaxError: Object literal may not have data and accessor property with the same name.
+PASS ({a:1, set a(){}}) threw exception SyntaxError: Object literal may not have data and accessor property with the same name.
+PASS ({get a(){}, a:1}) threw exception SyntaxError: Object literal may not have data and accessor property with the same name.
+PASS ({set a(){}, a:1}) threw exception SyntaxError: Object literal may not have data and accessor property with the same name.
+PASS ({get a(){}, get a(){}}) threw exception SyntaxError: Object literal may not have multiple get/set accessors with the same name.
+PASS ({set a(){}, set a(){}}) threw exception SyntaxError: Object literal may not have multiple get/set accessors with the same name.
+PASS ({set a(){}, get a(){}, set a(){}}) threw exception SyntaxError: Object literal may not have multiple get/set accessors with the same name.
+PASS (function(){({a:1, get a(){}})}) threw exception SyntaxError: Object literal may not have data and accessor property with the same name.
+PASS (function(){({a:1, set a(){}})}) threw exception SyntaxError: Object literal may not have data and accessor property with the same name.
+PASS (function(){({get a(){}, a:1})}) threw exception SyntaxError: Object literal may not have data and accessor property with the same name.
+PASS (function(){({set a(){}, a:1})}) threw exception SyntaxError: Object literal may not have data and accessor property with the same name.
+PASS (function(){({get a(){}, get a(){}})}) threw exception SyntaxError: Object literal may not have multiple get/set accessors with the same name.
+PASS (function(){({set a(){}, set a(){}})}) threw exception SyntaxError: Object literal may not have multiple get/set accessors with the same name.
+PASS (function(){({set a(){}, get a(){}, set a(){}})}) threw exception SyntaxError: Object literal may not have multiple get/set accessors with the same name.
+PASS ({a:1, a:1, a:1}), true is true
+PASS ({get a(){}, set a(){}}), true is true
+PASS ({set a(){}, get a(){}}), true is true
+PASS (function(){({a:1, a:1, a:1})}), true is true
+PASS (function(){({get a(){}, set a(){}})}), true is true
+PASS (function(){({set a(){}, get a(){}})}), true is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/object-literal-syntax.js b/test/webkit/object-literal-syntax.js
new file mode 100644 (file)
index 0000000..6884bec
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Make sure that we correctly identify parse errors in object literals");
+
+shouldThrow("({a:1, get a(){}})");
+shouldThrow("({a:1, set a(){}})");
+shouldThrow("({get a(){}, a:1})");
+shouldThrow("({set a(){}, a:1})");
+shouldThrow("({get a(){}, get a(){}})");
+shouldThrow("({set a(){}, set a(){}})");
+shouldThrow("({set a(){}, get a(){}, set a(){}})");
+shouldThrow("(function(){({a:1, get a(){}})})");
+shouldThrow("(function(){({a:1, set a(){}})})");
+shouldThrow("(function(){({get a(){}, a:1})})");
+shouldThrow("(function(){({set a(){}, a:1})})");
+shouldThrow("(function(){({get a(){}, get a(){}})})");
+shouldThrow("(function(){({set a(){}, set a(){}})})");
+shouldThrow("(function(){({set a(){}, get a(){}, set a(){}})})");
+shouldBeTrue("({a:1, a:1, a:1}), true");
+shouldBeTrue("({get a(){}, set a(){}}), true");
+shouldBeTrue("({set a(){}, get a(){}}), true");
+shouldBeTrue("(function(){({a:1, a:1, a:1})}), true");
+shouldBeTrue("(function(){({get a(){}, set a(){}})}), true");
+shouldBeTrue("(function(){({set a(){}, get a(){}})}), true");
diff --git a/test/webkit/order-of-operations-expected.txt b/test/webkit/order-of-operations-expected.txt
new file mode 100644 (file)
index 0000000..9316e29
--- /dev/null
@@ -0,0 +1,45 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+PASS (function(){ leftRight = ""; left() > right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() >= right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() < right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() <= right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() + right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() - right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() / right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() * right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() % right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() << right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() >> right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() >>> right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() || right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() && right(); return leftRight; })() is "Left"
+PASS (function(){ leftRight = ""; left() & right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() | right(); return leftRight; })() is "LeftRight"
+PASS (function(){ leftRight = ""; left() ^ right(); return leftRight; })() is "LeftRight"
+PASS testEvaluationOfArguments() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/order-of-operations.js b/test/webkit/order-of-operations.js
new file mode 100644 (file)
index 0000000..57a7706
--- /dev/null
@@ -0,0 +1,67 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+var leftRight;
+function left() {
+    leftRight = leftRight + "Left";
+}
+
+function right() {
+    leftRight = leftRight + "Right";
+}
+
+shouldBe('(function(){ leftRight = ""; left() > right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() >= right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() < right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() <= right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() + right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() - right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() / right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() * right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() % right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() << right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() >> right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() >>> right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() || right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() && right(); return leftRight; })()', '"Left"');
+shouldBe('(function(){ leftRight = ""; left() & right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() | right(); return leftRight; })()', '"LeftRight"');
+shouldBe('(function(){ leftRight = ""; left() ^ right(); return leftRight; })()', '"LeftRight"');
+
+function testEvaluationOfArguments()
+{
+    function throwPass()
+    {
+        throw "PASS";
+    }
+
+    var nonFunction = 42;
+
+    try {
+        nonFunction(throwPass());
+    } catch (e) {
+        return e == "PASS";
+    }
+}
+
+shouldBeTrue("testEvaluationOfArguments()");
diff --git a/test/webkit/parse-backslash-before-newline-expected.txt b/test/webkit/parse-backslash-before-newline-expected.txt
new file mode 100644 (file)
index 0000000..ed8cba9
--- /dev/null
@@ -0,0 +1,31 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+PASS "teststring with CR LF" is "teststring with CR LF"
+PASS "teststring with LF CR" is "teststring with LF CR"
+PASS "teststring with CR" is "teststring with CR"
+PASS "teststring with LF" is "teststring with LF"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/parse-backslash-before-newline.js b/test/webkit/parse-backslash-before-newline.js
new file mode 100644 (file)
index 0000000..d0a6fec
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+shouldBe('"test\
+string with CR LF"', '"teststring with CR LF"');
+
+shouldBe('"test\
+\rstring with LF CR"', '"teststring with LF CR"');
+
+shouldBe('"test\\rstring with CR"', '"teststring with CR"');
+
+shouldBe('"test\
+string with LF"', '"teststring with LF"');
diff --git a/test/webkit/parse-nan-expected.txt b/test/webkit/parse-nan-expected.txt
new file mode 100644 (file)
index 0000000..08f4ad7
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for a crash when parsing NaN. You should see the text 'NaN' below.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+NaN
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/parse-nan.js b/test/webkit/parse-nan.js
new file mode 100644 (file)
index 0000000..5d7d5f3
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks for a crash when parsing NaN. You should see the text 'NaN' below."
+);
+
+debug(-parseFloat("NAN(ffffeeeeeff0f)"));
diff --git a/test/webkit/parseFloat-expected.txt b/test/webkit/parseFloat-expected.txt
new file mode 100644 (file)
index 0000000..4c5a087
--- /dev/null
@@ -0,0 +1,76 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests for the parseFloat function.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS parseFloat() is NaN
+PASS parseFloat('') is NaN
+PASS parseFloat(' ') is NaN
+PASS parseFloat(' 0') is 0
+PASS parseFloat('0 ') is 0
+PASS parseFloat('x0') is NaN
+PASS parseFloat('0x') is 0
+PASS parseFloat(' 1') is 1
+PASS parseFloat('1 ') is 1
+PASS parseFloat('x1') is NaN
+PASS parseFloat('1x') is 1
+PASS parseFloat(' 2.3') is 2.3
+PASS parseFloat('2.3 ') is 2.3
+PASS parseFloat('x2.3') is NaN
+PASS parseFloat('2.3x') is 2.3
+PASS parseFloat('0x2') is 0
+PASS parseFloat('1' + nonASCIINonSpaceCharacter) is 1
+PASS parseFloat(nonASCIINonSpaceCharacter + '1') is NaN
+PASS parseFloat('1' + illegalUTF16Sequence) is 1
+PASS parseFloat(illegalUTF16Sequence + '1') is NaN
+PASS parseFloat(tab + '1') is 1
+PASS parseFloat(nbsp + '1') is 1
+PASS parseFloat(ff + '1') is 1
+PASS parseFloat(vt + '1') is 1
+PASS parseFloat(cr + '1') is 1
+PASS parseFloat(lf + '1') is 1
+PASS parseFloat(ls + '1') is 1
+PASS parseFloat(ps + '1') is 1
+PASS parseFloat(oghamSpaceMark + '1') is 1
+PASS parseFloat(mongolianVowelSeparator + '1') is 1
+PASS parseFloat(enQuad + '1') is 1
+PASS parseFloat(emQuad + '1') is 1
+PASS parseFloat(enSpace + '1') is 1
+PASS parseFloat(emSpace + '1') is 1
+PASS parseFloat(threePerEmSpace + '1') is 1
+PASS parseFloat(fourPerEmSpace + '1') is 1
+PASS parseFloat(sixPerEmSpace + '1') is 1
+PASS parseFloat(figureSpace + '1') is 1
+PASS parseFloat(punctuationSpace + '1') is 1
+PASS parseFloat(thinSpace + '1') is 1
+PASS parseFloat(hairSpace + '1') is 1
+PASS parseFloat(narrowNoBreakSpace + '1') is 1
+PASS parseFloat(mediumMathematicalSpace + '1') is 1
+PASS parseFloat(ideographicSpace + '1') is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/parseFloat.js b/test/webkit/parseFloat.js
new file mode 100644 (file)
index 0000000..a52539a
--- /dev/null
@@ -0,0 +1,98 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Tests for the parseFloat function.');
+
+var nonASCIINonSpaceCharacter = String.fromCharCode(0x13A0);
+var illegalUTF16Sequence = String.fromCharCode(0xD800);
+
+var tab = String.fromCharCode(9);
+var nbsp = String.fromCharCode(0xA0);
+var ff = String.fromCharCode(0xC);
+var vt = String.fromCharCode(0xB);
+var cr = String.fromCharCode(0xD);
+var lf = String.fromCharCode(0xA);
+var ls = String.fromCharCode(0x2028);
+var ps = String.fromCharCode(0x2029);
+
+var oghamSpaceMark = String.fromCharCode(0x1680);
+var mongolianVowelSeparator = String.fromCharCode(0x180E);
+var enQuad = String.fromCharCode(0x2000);
+var emQuad = String.fromCharCode(0x2001);
+var enSpace = String.fromCharCode(0x2002);
+var emSpace = String.fromCharCode(0x2003);
+var threePerEmSpace = String.fromCharCode(0x2004);
+var fourPerEmSpace = String.fromCharCode(0x2005);
+var sixPerEmSpace = String.fromCharCode(0x2006);
+var figureSpace = String.fromCharCode(0x2007);
+var punctuationSpace = String.fromCharCode(0x2008);
+var thinSpace = String.fromCharCode(0x2009);
+var hairSpace = String.fromCharCode(0x200A);
+var narrowNoBreakSpace = String.fromCharCode(0x202F);
+var mediumMathematicalSpace = String.fromCharCode(0x205F);
+var ideographicSpace = String.fromCharCode(0x3000);
+
+shouldBe("parseFloat()", "NaN");
+shouldBe("parseFloat('')", "NaN");
+shouldBe("parseFloat(' ')", "NaN");
+shouldBe("parseFloat(' 0')", "0");
+shouldBe("parseFloat('0 ')", "0");
+shouldBe("parseFloat('x0')", "NaN");
+shouldBe("parseFloat('0x')", "0");
+shouldBe("parseFloat(' 1')", "1");
+shouldBe("parseFloat('1 ')", "1");
+shouldBe("parseFloat('x1')", "NaN");
+shouldBe("parseFloat('1x')", "1");
+shouldBe("parseFloat(' 2.3')", "2.3");
+shouldBe("parseFloat('2.3 ')", "2.3");
+shouldBe("parseFloat('x2.3')", "NaN");
+shouldBe("parseFloat('2.3x')", "2.3");
+shouldBe("parseFloat('0x2')", "0");
+shouldBe("parseFloat('1' + nonASCIINonSpaceCharacter)", "1");
+shouldBe("parseFloat(nonASCIINonSpaceCharacter + '1')", "NaN");
+shouldBe("parseFloat('1' + illegalUTF16Sequence)", "1");
+shouldBe("parseFloat(illegalUTF16Sequence + '1')", "NaN");
+shouldBe("parseFloat(tab + '1')", "1");
+shouldBe("parseFloat(nbsp + '1')", "1");
+shouldBe("parseFloat(ff + '1')", "1");
+shouldBe("parseFloat(vt + '1')", "1");
+shouldBe("parseFloat(cr + '1')", "1");
+shouldBe("parseFloat(lf + '1')", "1");
+shouldBe("parseFloat(ls + '1')", "1");
+shouldBe("parseFloat(ps + '1')", "1");
+shouldBe("parseFloat(oghamSpaceMark + '1')", "1");
+shouldBe("parseFloat(mongolianVowelSeparator + '1')", "1");
+shouldBe("parseFloat(enQuad + '1')", "1");
+shouldBe("parseFloat(emQuad + '1')", "1");
+shouldBe("parseFloat(enSpace + '1')", "1");
+shouldBe("parseFloat(emSpace + '1')", "1");
+shouldBe("parseFloat(threePerEmSpace + '1')", "1");
+shouldBe("parseFloat(fourPerEmSpace + '1')", "1");
+shouldBe("parseFloat(sixPerEmSpace + '1')", "1");
+shouldBe("parseFloat(figureSpace + '1')", "1");
+shouldBe("parseFloat(punctuationSpace + '1')", "1");
+shouldBe("parseFloat(thinSpace + '1')", "1");
+shouldBe("parseFloat(hairSpace + '1')", "1");
+shouldBe("parseFloat(narrowNoBreakSpace + '1')", "1");
+shouldBe("parseFloat(mediumMathematicalSpace + '1')", "1");
+shouldBe("parseFloat(ideographicSpace + '1')", "1");
diff --git a/test/webkit/parseInt-expected.txt b/test/webkit/parseInt-expected.txt
new file mode 100644 (file)
index 0000000..6a644a0
--- /dev/null
@@ -0,0 +1,69 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests for the parseInt function.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS parseInt('123') is 123
+PASS parseInt('123x4') is 123
+PASS parseInt('-123') is -123
+PASS parseInt('0x123') is 0x123
+PASS parseInt('0x123x4') is 0x123
+PASS parseInt('-0x123x4') is -0x123
+PASS parseInt('-') is Number.NaN
+PASS parseInt('0x') is Number.NaN
+PASS parseInt('-0x') is Number.NaN
+PASS parseInt('123', undefined) is 123
+PASS parseInt('123', null) is 123
+PASS parseInt('123', 0) is 123
+PASS parseInt('123', 10) is 123
+PASS parseInt('123', 16) is 0x123
+PASS parseInt('0x123', undefined) is 0x123
+PASS parseInt('0x123', null) is 0x123
+PASS parseInt('0x123', 0) is 0x123
+PASS parseInt('0x123', 10) is 0
+PASS parseInt('0x123', 16) is 0x123
+PASS parseInt(Math.pow(10, 20)) is 100000000000000000000
+PASS parseInt(Math.pow(10, 21)) is 1
+PASS parseInt(Math.pow(10, -6)) is 0
+PASS parseInt(Math.pow(10, -7)) is 1
+PASS parseInt(-Math.pow(10, 20)) is -100000000000000000000
+PASS parseInt(-Math.pow(10, 21)) is -1
+PASS parseInt(-Math.pow(10, -6)) is -0
+PASS parseInt(-Math.pow(10, -7)) is -1
+PASS parseInt('0') is 0
+PASS parseInt('-0') is -0
+PASS parseInt(0) is 0
+PASS parseInt(-0) is 0
+PASS parseInt(2147483647) is 2147483647
+PASS parseInt(2147483648) is 2147483648
+PASS parseInt('2147483647') is 2147483647
+PASS parseInt('2147483648') is 2147483648
+PASS state = null; try { parseInt('123', throwingRadix); } catch (e) {} state; is "throwingRadix"
+PASS state = null; try { parseInt(throwingString, throwingRadix); } catch (e) {} state; is "throwingString"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/parseInt.js b/test/webkit/parseInt.js
new file mode 100644 (file)
index 0000000..a59c8f0
--- /dev/null
@@ -0,0 +1,77 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Tests for the parseInt function.');
+
+// Simple hex & dec integer values.
+shouldBe("parseInt('123')", '123');
+shouldBe("parseInt('123x4')", '123');
+shouldBe("parseInt('-123')", '-123');
+shouldBe("parseInt('0x123')", '0x123');
+shouldBe("parseInt('0x123x4')", '0x123');
+shouldBe("parseInt('-0x123x4')", '-0x123');
+shouldBe("parseInt('-')", 'Number.NaN');
+shouldBe("parseInt('0x')", 'Number.NaN');
+shouldBe("parseInt('-0x')", 'Number.NaN');
+
+// These call default to base 10, unless radix is explicitly 16.
+shouldBe("parseInt('123', undefined)", '123');
+shouldBe("parseInt('123', null)", '123');
+shouldBe("parseInt('123', 0)", '123');
+shouldBe("parseInt('123', 10)", '123');
+shouldBe("parseInt('123', 16)", '0x123');
+// These call default to base 16, unless radix is explicitly 10.
+shouldBe("parseInt('0x123', undefined)", '0x123');
+shouldBe("parseInt('0x123', null)", '0x123');
+shouldBe("parseInt('0x123', 0)", '0x123');
+shouldBe("parseInt('0x123', 10)", '0');
+shouldBe("parseInt('0x123', 16)", '0x123');
+
+// Test edge cases for the Number.toString exponential ranges.
+shouldBe("parseInt(Math.pow(10, 20))", '100000000000000000000');
+shouldBe("parseInt(Math.pow(10, 21))", '1');
+shouldBe("parseInt(Math.pow(10, -6))", '0');
+shouldBe("parseInt(Math.pow(10, -7))", '1');
+shouldBe("parseInt(-Math.pow(10, 20))", '-100000000000000000000');
+shouldBe("parseInt(-Math.pow(10, 21))", '-1');
+shouldBe("parseInt(-Math.pow(10, -6))", '-0');
+shouldBe("parseInt(-Math.pow(10, -7))", '-1');
+
+// Test correct handling for -0.
+shouldBe("parseInt('0')", '0');
+shouldBe("parseInt('-0')", '-0');
+shouldBe("parseInt(0)", '0');
+shouldBe("parseInt(-0)", '0');
+
+// Test edge cases of our optimized int handling.
+shouldBe("parseInt(2147483647)", '2147483647');
+shouldBe("parseInt(2147483648)", '2147483648');
+shouldBe("parseInt('2147483647')", '2147483647');
+shouldBe("parseInt('2147483648')", '2147483648');
+
+// Add test cases where the ToString/ToInt32 conversions throw.
+var state;
+var throwingRadix = { valueOf: function(){ state = "throwingRadix"; throw null; } };
+var throwingString = { toString: function(){ state = "throwingString"; throw null; } };
+shouldBe("state = null; try { parseInt('123', throwingRadix); } catch (e) {} state;", '"throwingRadix"');
+shouldBe("state = null; try { parseInt(throwingString, throwingRadix); } catch (e) {} state;", '"throwingString"');
diff --git a/test/webkit/parser-high-byte-character-expected.txt b/test/webkit/parser-high-byte-character-expected.txt
new file mode 100644 (file)
index 0000000..e40cdd5
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that high-byte characters in comments do not crash or cause parser errors.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/parser-high-byte-character.js b/test/webkit/parser-high-byte-character.js
new file mode 100644 (file)
index 0000000..4e500fa
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that high-byte characters in comments do not crash or cause parser errors."
+);
+
+// Some high-byte characters: ¸´Ñ¡»ò²»¸´Ñ¡ËùÓеÄÁбí¶àÑ¡¿ò
+function runTest(_a, throws)
+{
+    testPassed();
+}
+
+/*
+Over 1024 bytes to ensure precompilation caching is triggered.
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+XXXXXXXXXXXXXXXXXXXXXXXX
+*/
diff --git a/test/webkit/parser-xml-close-comment-expected.txt b/test/webkit/parser-xml-close-comment-expected.txt
new file mode 100644 (file)
index 0000000..6f9716b
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct handling of --> as a single line comment when at the beginning of a line
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 'should be a syntax error' --> threw exception SyntaxError: Unexpected end of input.
+PASS /**/ 1 --> threw exception SyntaxError: Unexpected end of input.
+PASS 1 /**/ --> threw exception SyntaxError: Unexpected end of input.
+PASS 1/*
+*/--> threw exception SyntaxError: Unexpected token >.
+PASS --> is undefined.
+PASS /**/--> is undefined.
+PASS /*
+*/--> is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/parser-xml-close-comment.js b/test/webkit/parser-xml-close-comment.js
new file mode 100644 (file)
index 0000000..d3f458f
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct handling of --> as a single line comment when at the beginning of a line");
+
+shouldThrow("'should be a syntax error' -->");
+shouldThrow("/**/ 1 -->");
+shouldThrow("1 /**/ -->");
+shouldThrow("1/*\n*/-->");
+
+shouldBeUndefined("-->");
+shouldBeUndefined("/**/-->");
+shouldBeUndefined("/*\n*/-->");
diff --git a/test/webkit/polymorphic-construct-expected.txt b/test/webkit/polymorphic-construct-expected.txt
new file mode 100644 (file)
index 0000000..34f8839
--- /dev/null
@@ -0,0 +1,44 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that polymorphic construction works correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS construct(Foo).field is 'foo'
+PASS construct(Foo).field is 'foo'
+PASS construct(Foo).field is 'foo'
+PASS construct(Foo).field is 'foo'
+PASS construct(Bar).field is 'bar'
+PASS construct(Baz).field is 'baz'
+PASS construct(Foo).field is 'foo'
+PASS construct(Bar).field is 'bar'
+PASS construct(Baz).field is 'baz'
+PASS construct(Foo).field is 'foo'
+PASS construct(Bar).field is 'bar'
+PASS construct(Baz).field is 'baz'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/polymorphic-construct.js b/test/webkit/polymorphic-construct.js
new file mode 100644 (file)
index 0000000..1a447b4
--- /dev/null
@@ -0,0 +1,52 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that polymorphic construction works correctly."
+);
+
+function Foo() {
+    this.field = "foo";
+}
+
+function Bar() {
+    this.field = "bar";
+}
+
+function Baz() {
+    this.field = "baz";
+}
+
+function construct(what) {
+    return new what();
+}
+
+for (var i = 0; i < 3; ++i) {
+    shouldBe("construct(Foo).field", "'foo'");
+}
+
+for (var i = 0; i < 3; ++i) {
+    shouldBe("construct(Foo).field", "'foo'");
+    shouldBe("construct(Bar).field", "'bar'");
+    shouldBe("construct(Baz).field", "'baz'");
+}
diff --git a/test/webkit/pretty-print-expected.txt b/test/webkit/pretty-print-expected.txt
new file mode 100644 (file)
index 0000000..5362f9f
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that regexps, strings with special characters, object literals with non-identifier names, and array literals are pretty-printed correctly
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS g().toString() is ['a', 'b', 'c'].toString()
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/pretty-print.js b/test/webkit/pretty-print.js
new file mode 100644 (file)
index 0000000..67e4065
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that regexps, strings with special characters, object literals with non-identifier names, and array literals are pretty-printed correctly"
+);
+
+function f() {
+    var re = /test/g;
+    var s = '\n\r\\';
+}
+
+function g() {
+    var o = {"#000": 1};
+    return ["a", "b", "c"];
+}
+
+eval(f.toString());
+
+eval(g.toString());
+shouldBe("g().toString()", "['a', 'b', 'c'].toString()");
diff --git a/test/webkit/preventExtensions-expected.txt b/test/webkit/preventExtensions-expected.txt
new file mode 100644 (file)
index 0000000..196b0a8
--- /dev/null
@@ -0,0 +1,66 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks whether various seal/freeze/preventExtentions work on a regular object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (new inextensible).prototypeExists is true
+PASS (new sealed).prototypeExists is true
+PASS (new frozen).prototypeExists is true
+PASS test(obj()) is "(b:4)(c:3)E"
+PASS test(preventExtensions(obj())) is "(b:4)"
+PASS test(seal(obj())) is "(a:1)(b:4)S"
+PASS test(freeze(obj())) is "(a:1)(b:2)SF"
+PASS Object.preventExtensions(Math.sin) is Math.sin
+PASS var o = {}; Object.preventExtensions(o); o.__proto__ = { newProp: "Should not see this" }; o.newProp; threw exception TypeError: #<Object> is not extensible.
+PASS "use strict"; var o = {}; Object.preventExtensions(o); o.__proto__ = { newProp: "Should not see this" }; o.newProp; threw exception TypeError: #<Object> is not extensible.
+PASS Object.preventExtensions(Math); Math.sqrt(4) is 2
+PASS var arr = Object.preventExtensions([]); arr[0] = 42; arr[0] is undefined.
+PASS var arr = Object.preventExtensions([]); arr[0] = 42; arr.length is 0
+PASS "use strict"; var arr = Object.preventExtensions([]); arr[0] = 42; arr[0] threw exception TypeError: Can't add property 0, object is not extensible.
+PASS obj.foo is 1
+PASS Object.isFrozen(func) is true
+PASS func.prototype === 42 is false
+PASS Object.getOwnPropertyDescriptor(func, "prototype").writable is false
+PASS Object.isFrozen(strictFunc) is true
+PASS strictFunc.prototype === 42 is false
+PASS Object.getOwnPropertyDescriptor(strictFunc, "prototype").writable is false
+PASS Object.isFrozen(array) is true
+PASS array[0] is 0
+PASS Object.getOwnPropertyDescriptor(array, "length").writable is false
+PASS Object.isFrozen(args) is true
+PASS args[0] is 0
+PASS Object.getOwnPropertyDescriptor(args, "length").writable is false
+PASS Object.getOwnPropertyDescriptor(args, "callee").writable is false
+PASS preventExtensionsFreezeIsFrozen(function foo(){}) is true
+PASS preventExtensionsFreezeIsFrozen(function foo(){ "use strict"; }) is true
+PASS preventExtensionsFreezeIsFrozen([0,1,2]) is true
+PASS preventExtensionsFreezeIsFrozen((function(){ return arguments; })(0,1,2)) is true
+PASS Object.getOwnPropertyDescriptor(freeze({0:0}), 0).configurable is false
+PASS Object.getOwnPropertyDescriptor(freeze({10000001:0}), 10000001).configurable is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/preventExtensions.js b/test/webkit/preventExtensions.js
new file mode 100644 (file)
index 0000000..ec92235
--- /dev/null
@@ -0,0 +1,157 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks whether various seal/freeze/preventExtentions work on a regular object."
+);
+
+function obj()
+{
+    // Add an accessor property to check 'isFrozen' returns the correct result for objects with accessors.
+    return Object.defineProperty({ a: 1, b: 2 }, 'g', { get: function() { return "getter"; } });
+}
+
+function test(obj)
+{
+    obj.c =3;
+    obj.b =4;
+    delete obj.a;
+
+    var result = "";
+    for (key in obj)
+        result += ("(" + key + ":" + obj[key] + ")");
+    if (Object.isSealed(obj))
+        result += "S";
+    if (Object.isFrozen(obj))
+        result += "F";
+    if (Object.isExtensible(obj))
+        result += "E";
+    return result;
+}
+
+function seal(obj)
+{
+    Object.seal(obj);
+    return obj;
+}
+
+function freeze(obj)
+{
+    Object.freeze(obj);
+    return obj;
+}
+
+function preventExtensions(obj)
+{
+    Object.preventExtensions(obj);
+    return obj;
+}
+
+function inextensible(){}
+function sealed(){}
+function frozen(){};
+preventExtensions(inextensible);
+seal(sealed);
+freeze(frozen);
+new inextensible;
+new sealed;
+new frozen;
+inextensible.prototype.prototypeExists = true;
+sealed.prototype.prototypeExists = true;
+frozen.prototype.prototypeExists = true;
+
+shouldBeTrue("(new inextensible).prototypeExists");
+shouldBeTrue("(new sealed).prototypeExists");
+shouldBeTrue("(new frozen).prototypeExists");
+
+shouldBe('test(obj())', '"(b:4)(c:3)E"'); // extensible, can delete a, can modify b, and can add c
+shouldBe('test(preventExtensions(obj()))', '"(b:4)"'); // <nothing>, can delete a, can modify b, and CANNOT add c
+shouldBe('test(seal(obj()))', '"(a:1)(b:4)S"'); // sealed, CANNOT delete a, can modify b, and CANNOT add c
+shouldBe('test(freeze(obj()))', '"(a:1)(b:2)SF"'); // sealed and frozen, CANNOT delete a, CANNOT modify b, and CANNOT add c
+
+// check that we can preventExtensions on a host function.
+shouldBe('Object.preventExtensions(Math.sin)', 'Math.sin');
+
+shouldThrow('var o = {}; Object.preventExtensions(o); o.__proto__ = { newProp: "Should not see this" }; o.newProp;');
+shouldThrow('"use strict"; var o = {}; Object.preventExtensions(o); o.__proto__ = { newProp: "Should not see this" }; o.newProp;');
+
+// check that we can still access static properties on an object after calling preventExtensions.
+shouldBe('Object.preventExtensions(Math); Math.sqrt(4)', '2');
+
+// Should not be able to add properties to a preventExtensions array.
+shouldBeUndefined('var arr = Object.preventExtensions([]); arr[0] = 42; arr[0]');
+shouldBe('var arr = Object.preventExtensions([]); arr[0] = 42; arr.length', '0');
+// In strict mode, this throws.
+shouldThrow('"use strict"; var arr = Object.preventExtensions([]); arr[0] = 42; arr[0]');
+
+// A read-only property on the prototype should prevent a [[Put]] .
+function Constructor() {}
+Constructor.prototype.foo = 1;
+Object.freeze(Constructor.prototype);
+var obj = new Constructor();
+obj.foo = 2;
+shouldBe('obj.foo', '1');
+
+// Check that freezing a function works correctly.
+var func = freeze(function foo(){});
+shouldBeTrue('Object.isFrozen(func)')
+func.prototype = 42;
+shouldBeFalse('func.prototype === 42');
+shouldBeFalse('Object.getOwnPropertyDescriptor(func, "prototype").writable')
+
+// Check that freezing a strict function works correctly.
+var strictFunc = freeze(function foo(){ "use strict"; });
+shouldBeTrue('Object.isFrozen(strictFunc)')
+strictFunc.prototype = 42;
+shouldBeFalse('strictFunc.prototype === 42');
+shouldBeFalse('Object.getOwnPropertyDescriptor(strictFunc, "prototype").writable')
+
+// Check that freezing array objects works correctly.
+var array = freeze([0,1,2]);
+shouldBeTrue('Object.isFrozen(array)')
+array[0] = 3;
+shouldBe('array[0]', '0');
+shouldBeFalse('Object.getOwnPropertyDescriptor(array, "length").writable')
+
+// Check that freezing arguments objects works correctly.
+var args = freeze((function(){ return arguments; })(0,1,2));
+shouldBeTrue('Object.isFrozen(args)')
+args[0] = 3;
+shouldBe('args[0]', '0');
+shouldBeFalse('Object.getOwnPropertyDescriptor(args, "length").writable')
+shouldBeFalse('Object.getOwnPropertyDescriptor(args, "callee").writable')
+
+// Check that freeze still works if preventExtensions has been called on the object.
+function preventExtensionsFreezeIsFrozen(x)
+{
+    Object.preventExtensions(x);
+    Object.freeze(x);
+    return Object.isFrozen(x);
+}
+shouldBeTrue('preventExtensionsFreezeIsFrozen(function foo(){})')
+shouldBeTrue('preventExtensionsFreezeIsFrozen(function foo(){ "use strict"; })')
+shouldBeTrue('preventExtensionsFreezeIsFrozen([0,1,2])')
+shouldBeTrue('preventExtensionsFreezeIsFrozen((function(){ return arguments; })(0,1,2))')
+
+shouldBeFalse('Object.getOwnPropertyDescriptor(freeze({0:0}), 0).configurable');
+shouldBeFalse('Object.getOwnPropertyDescriptor(freeze({10000001:0}), 10000001).configurable');
diff --git a/test/webkit/primitive-method-this-expected.txt b/test/webkit/primitive-method-this-expected.txt
new file mode 100644 (file)
index 0000000..99be8e0
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that methods called directly on primitive types get the wrapper, not the primitive, as the 'this' object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (1).thisType() is 'object'
+PASS (2.3).thisType() is 'object'
+PASS 'xxx'.thisType() is 'object'
+PASS (false).thisType() is 'object'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/primitive-method-this.js b/test/webkit/primitive-method-this.js
new file mode 100644 (file)
index 0000000..ffffdd7
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+"This test checks that methods called directly on primitive types get the wrapper, not the primitive, as the 'this' object."
+
+);
+
+
+String.prototype.thisType = function() { return typeof this; };
+Number.prototype.thisType = function() { return typeof this; };
+Boolean.prototype.thisType = function() { return typeof this; };
+
+shouldBe("(1).thisType()", "'object'");
+shouldBe("(2.3).thisType()", "'object'");
+shouldBe("'xxx'.thisType()", "'object'");
+shouldBe("(false).thisType()", "'object'");
diff --git a/test/webkit/property-getters-and-setters-expected.txt b/test/webkit/property-getters-and-setters-expected.txt
new file mode 100644 (file)
index 0000000..0f2f4b6
--- /dev/null
@@ -0,0 +1,65 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This performs a number of different tests on JavaScript getters and setters.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+the get set object declaration syntax
+PASS o1.b is 8
+PASS o1.b is 11
+__defineGetter__ and __defineSetter__
+PASS o2.b is 8
+PASS o2.b is 11
+Setting a value without having a setter
+PASS o3.x = 10; o3.x is 42
+Getting a value without having a getter
+PASS o4.x is undefined.
+__lookupGetter__ and __lookupSetter__
+PASS o4.__lookupGetter__('b') is getB
+PASS o4.__lookupSetter__('b') is setB
+__defineGetter__ and __defineSetter__ with various invalid arguments
+PASS o5.__defineSetter__('a', null) threw exception TypeError: Object.prototype.__defineSetter__: Expecting function.
+PASS o5.__defineSetter__('a', o5) threw exception TypeError: Object.prototype.__defineSetter__: Expecting function.
+PASS o5.__defineGetter__('a', null) threw exception TypeError: Object.prototype.__defineGetter__: Expecting function.
+PASS o5.__defineGetter__('a', o5) threw exception TypeError: Object.prototype.__defineGetter__: Expecting function.
+setters and getters with exceptions
+PASS x = o6.x threw exception Exception in get.
+PASS x is 0
+PASS o6.x = 42 threw exception Exception in set.
+Defining a setter should also define a getter for the same property which returns undefined. Thus, a getter defined on the prototype should not be called.
+PASS o7.x is undefined.
+If an object has a property and its prototype has a setter function for that property, then setting the property should set the property directly and not call the setter function.
+PASS o8.numSets is 0
+PASS typeof testObj.getter is 'string'
+the get set with string property name
+PASS o9.b is 8
+PASS o9.b is 11
+the get set with numeric property name
+PASS o10[42] is 8
+PASS o10[42] is 11
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/property-getters-and-setters.js b/test/webkit/property-getters-and-setters.js
new file mode 100644 (file)
index 0000000..335d872
--- /dev/null
@@ -0,0 +1,104 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This performs a number of different tests on JavaScript getters and setters."
+);
+
+debug("the get set object declaration syntax");
+var o1 = { 'a':7, get b() { return this.a + 1 }, set b(x) { this.a = x } }
+shouldBe("o1.b", "8");
+o1.b = 10;
+shouldBe("o1.b", "11");
+
+debug("__defineGetter__ and __defineSetter__");
+var o2 = new Object()
+o2.a = 7;
+o2.__defineGetter__('b', function getB() { return this.a + 1} )
+o2.__defineSetter__('b', function setB(x) { this.a = x})
+shouldBe("o2.b", "8");
+o2.b = 10;
+shouldBe("o2.b", "11");
+
+debug("Setting a value without having a setter");
+var o3 = { get x() { return 42; } }
+shouldBe("o3.x = 10; o3.x", "42");
+
+debug("Getting a value without having a getter");
+var o4 = { set x(y) { }}
+shouldBeUndefined("o4.x");
+
+debug("__lookupGetter__ and __lookupSetter__");
+var o4 = new Object()
+function getB() { return this.a }
+function setB(x) { this.a = x }
+o4.__defineGetter__('b', getB)
+o4.__defineSetter__('b', setB)
+
+shouldBe("o4.__lookupGetter__('b')", "getB");
+shouldBe("o4.__lookupSetter__('b')", "setB");
+
+debug("__defineGetter__ and __defineSetter__ with various invalid arguments");
+var numExceptions = 0;
+var o5 = new Object();
+shouldThrow("o5.__defineSetter__('a', null)");
+shouldThrow("o5.__defineSetter__('a', o5)");
+shouldThrow("o5.__defineGetter__('a', null)");
+shouldThrow("o5.__defineGetter__('a', o5)");
+
+debug("setters and getters with exceptions");
+var o6 = { get x() { throw 'Exception in get'}, set x(f) { throw 'Exception in set'}}
+var x = 0;
+var numExceptions = 0;
+shouldThrow("x = o6.x");
+shouldBe("x", "0");
+shouldThrow("o6.x = 42");
+
+debug("Defining a setter should also define a getter for the same property which returns undefined. Thus, a getter defined on the prototype should not be called.");
+o7 = { 'a':7, set x(b) { this.a = b; }}
+o7.prototype = { get x() { return 42; }}
+shouldBeUndefined("o7.x")
+
+debug("If an object has a property and its prototype has a setter function for that property, then setting the property should set the property directly and not call the setter function.");
+var o8 = new Object()
+o8.numSets = 0;
+o8.x = 10;
+o8.__proto__.__defineSetter__('x', function() { this.numSets++; })
+o8.x = 20;
+shouldBe("o8.numSets", "0");
+
+({getter:"foo", b:"bar"});
+testObj=({get getter(){return 'getter was called.'}, b: 'bar'})
+shouldBe("typeof testObj.getter", "'string'");
+
+debug("the get set with string property name");
+var o9 = { 'a':7, get 'b'() { return this.a + 1 }, set 'b'(x) { this.a = x } }
+shouldBe("o9.b", "8");
+o9.b = 10;
+shouldBe("o9.b", "11");
+
+debug("the get set with numeric property name");
+var o10 = { 'a':7, get 42() { return this.a + 1 }, set 42(x) { this.a = x } }
+shouldBe("o10[42]", "8");
+o10[42] = 10;
+shouldBe("o10[42]", "11");
diff --git a/test/webkit/property-iteration-expected.txt b/test/webkit/property-iteration-expected.txt
new file mode 100644 (file)
index 0000000..edf3770
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests ordering of static properties.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS arrayEqual(before, after) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/property-iteration.js b/test/webkit/property-iteration.js
new file mode 100644 (file)
index 0000000..af7984e
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This tests ordering of static properties.");
+
+function arrayEqual(a,b)
+{
+    if (a.length != b.length)
+        return false;
+    for (var i in a)
+        if (a[i] !== b[i])
+            return false;
+    return true;
+}
+
+// Assigning to 'Math.sin' should not change iteration order of properties.
+var before = Object.getOwnPropertyNames(Math);
+Math.sin = 42;
+var after = Object.getOwnPropertyNames(Math);
+
+shouldBeTrue('arrayEqual(before, after)');
+
+successfullyParsed = true;
diff --git a/test/webkit/propertyIsEnumerable-expected.txt b/test/webkit/propertyIsEnumerable-expected.txt
new file mode 100644 (file)
index 0000000..e3fd215
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that propertyIsEnumerable works according to the ECMA spec.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS a.propertyIsEnumerable('length') is false
+PASS a.propertyIsEnumerable ('foo') is true
+PASS a.propertyIsEnumerable ('non-existant') is false
+PASS global.propertyIsEnumerable ('aVarDecl') is true
+PASS global.propertyIsEnumerable ('aFunctionDecl') is true
+PASS global.propertyIsEnumerable ('Math') is false
+PASS global.propertyIsEnumerable ('NaN') is false
+PASS global.propertyIsEnumerable ('undefined') is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/propertyIsEnumerable.js b/test/webkit/propertyIsEnumerable.js
new file mode 100644 (file)
index 0000000..e6dc22f
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that propertyIsEnumerable works according to the ECMA spec."
+);
+
+a = new Array();
+a.foo='bar'
+
+var aVarDecl;
+function aFunctionDecl(){}
+var global = this;
+shouldBeFalse("a.propertyIsEnumerable('length')");
+shouldBeTrue("a.propertyIsEnumerable ('foo')");
+shouldBeFalse("a.propertyIsEnumerable ('non-existant')");
+
+shouldBeTrue("global.propertyIsEnumerable ('aVarDecl')");
+shouldBeTrue("global.propertyIsEnumerable ('aFunctionDecl')");
+shouldBeFalse("global.propertyIsEnumerable ('Math')");
+shouldBeFalse("global.propertyIsEnumerable ('NaN')");
+shouldBeFalse("global.propertyIsEnumerable ('undefined')");
diff --git a/test/webkit/prototypes-expected.txt b/test/webkit/prototypes-expected.txt
new file mode 100644 (file)
index 0000000..c2c35b1
--- /dev/null
@@ -0,0 +1,90 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test prototypes of various objects and the various means to access them.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS ('').__proto__ is String.prototype
+PASS (0).__proto__ is Number.prototype
+PASS ([]).__proto__ is Array.prototype
+PASS ({}).__proto__ is Object.prototype
+PASS (new Date).__proto__ is Date.prototype
+PASS (new Number).__proto__ is Number.prototype
+PASS (new Object).__proto__ is Object.prototype
+PASS (new String).__proto__ is String.prototype
+PASS Array.prototype.__proto__ is Object.prototype
+PASS Date.prototype.__proto__ is Object.prototype
+PASS Number.prototype.__proto__ is Object.prototype
+PASS Object.prototype.__proto__ is null
+PASS String.prototype.__proto__ is Object.prototype
+PASS Array.__proto__ is Object.__proto__
+PASS Date.__proto__ is Object.__proto__
+PASS Number.__proto__ is Object.__proto__
+PASS String.__proto__ is Object.__proto__
+PASS Object.getPrototypeOf('') threw exception TypeError: Object.getPrototypeOf called on non-object.
+PASS Object.getPrototypeOf(0) threw exception TypeError: Object.getPrototypeOf called on non-object.
+PASS Object.getPrototypeOf([]) is Array.prototype
+PASS Object.getPrototypeOf({}) is Object.prototype
+PASS Object.getPrototypeOf(new Date) is Date.prototype
+PASS Object.getPrototypeOf(new Number) is Number.prototype
+PASS Object.getPrototypeOf(new Object) is Object.prototype
+PASS Object.getPrototypeOf(new String) is String.prototype
+PASS Object.getPrototypeOf(Array.prototype) is Object.prototype
+PASS Object.getPrototypeOf(Date.prototype) is Object.prototype
+PASS Object.getPrototypeOf(Number.prototype) is Object.prototype
+PASS Object.getPrototypeOf(Object.prototype) is null
+PASS Object.getPrototypeOf(String.prototype) is Object.prototype
+PASS Object.getPrototypeOf(Array) is Object.__proto__
+PASS Object.getPrototypeOf(Date) is Object.__proto__
+PASS Object.getPrototypeOf(Number) is Object.__proto__
+PASS Object.getPrototypeOf(String) is Object.__proto__
+PASS String.prototype.isPrototypeOf('') is false
+PASS Number.prototype.isPrototypeOf(0) is false
+PASS Array.prototype.isPrototypeOf([]) is true
+PASS Object.prototype.isPrototypeOf({}) is true
+PASS Date.prototype.isPrototypeOf(new Date) is true
+PASS Number.prototype.isPrototypeOf(new Number) is true
+PASS Object.prototype.isPrototypeOf(new Object) is true
+PASS String.prototype.isPrototypeOf(new String) is true
+PASS Object.prototype.isPrototypeOf(Array.prototype) is true
+PASS Object.prototype.isPrototypeOf(Date.prototype) is true
+PASS Object.prototype.isPrototypeOf(Number.prototype) is true
+PASS Object.prototype.isPrototypeOf(String.prototype) is true
+PASS Object.__proto__.isPrototypeOf(Array) is true
+PASS Object.__proto__.isPrototypeOf(Date) is true
+PASS Object.__proto__.isPrototypeOf(Number) is true
+PASS Object.__proto__.isPrototypeOf(String) is true
+PASS var wasSet = false; var o = { }; o.__defineGetter__("__proto__", function() { wasSet = true }); o.__proto__; wasSet; is true
+PASS var wasSet = false; var o = { }; o.__defineSetter__("__proto__", function() { wasSet = true }); o.__proto__ = {}; wasSet; is true
+PASS var wasSet = false; var o = { }; Object.defineProperty(o, "__proto__", { "get": function() { wasSet = true } }); o.__proto__; wasSet; is true
+PASS var wasSet = false; var o = { }; Object.defineProperty(o, "__proto__", { "__proto__": function(x) { wasSet = true } }); o.__proto__ = {}; wasSet; is false
+PASS var o = {}; o.__proto__ = { x:true }; o.x is true
+PASS var o = {}; o.__proto__ = { x:true }; o.hasOwnProperty('__proto__') is false
+PASS var o = {}; o.__proto__ = { x:true }; o.x is undefined.
+PASS var o = {}; o.__proto__ = { x:true }; o.hasOwnProperty('__proto__') is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/prototypes.js b/test/webkit/prototypes.js
new file mode 100644 (file)
index 0000000..26ae286
--- /dev/null
@@ -0,0 +1,91 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test prototypes of various objects and the various means to access them.'
+);
+
+shouldBe("('').__proto__", "String.prototype");
+shouldBe("(0).__proto__", "Number.prototype");
+shouldBe("([]).__proto__", "Array.prototype");
+shouldBe("({}).__proto__", "Object.prototype");
+shouldBe("(new Date).__proto__", "Date.prototype");
+shouldBe("(new Number).__proto__", "Number.prototype");
+shouldBe("(new Object).__proto__", "Object.prototype");
+shouldBe("(new String).__proto__", "String.prototype");
+shouldBe("Array.prototype.__proto__", "Object.prototype");
+shouldBe("Date.prototype.__proto__", "Object.prototype");
+shouldBe("Number.prototype.__proto__", "Object.prototype");
+shouldBe("Object.prototype.__proto__", "null");
+shouldBe("String.prototype.__proto__", "Object.prototype");
+shouldBe("Array.__proto__", "Object.__proto__");
+shouldBe("Date.__proto__", "Object.__proto__");
+shouldBe("Number.__proto__", "Object.__proto__");
+shouldBe("String.__proto__", "Object.__proto__");
+
+shouldThrow("Object.getPrototypeOf('')");
+shouldThrow("Object.getPrototypeOf(0)");
+shouldBe("Object.getPrototypeOf([])", "Array.prototype");
+shouldBe("Object.getPrototypeOf({})", "Object.prototype");
+shouldBe("Object.getPrototypeOf(new Date)", "Date.prototype");
+shouldBe("Object.getPrototypeOf(new Number)", "Number.prototype");
+shouldBe("Object.getPrototypeOf(new Object)", "Object.prototype");
+shouldBe("Object.getPrototypeOf(new String)", "String.prototype");
+shouldBe("Object.getPrototypeOf(Array.prototype)", "Object.prototype");
+shouldBe("Object.getPrototypeOf(Date.prototype)", "Object.prototype");
+shouldBe("Object.getPrototypeOf(Number.prototype)", "Object.prototype");
+shouldBe("Object.getPrototypeOf(Object.prototype)", "null");
+shouldBe("Object.getPrototypeOf(String.prototype)", "Object.prototype");
+shouldBe("Object.getPrototypeOf(Array)", "Object.__proto__");
+shouldBe("Object.getPrototypeOf(Date)", "Object.__proto__");
+shouldBe("Object.getPrototypeOf(Number)", "Object.__proto__");
+shouldBe("Object.getPrototypeOf(String)", "Object.__proto__");
+
+shouldBeFalse("String.prototype.isPrototypeOf('')");
+shouldBeFalse("Number.prototype.isPrototypeOf(0)");
+shouldBeTrue("Array.prototype.isPrototypeOf([])");
+shouldBeTrue("Object.prototype.isPrototypeOf({})");
+shouldBeTrue("Date.prototype.isPrototypeOf(new Date)");
+shouldBeTrue("Number.prototype.isPrototypeOf(new Number)");
+shouldBeTrue("Object.prototype.isPrototypeOf(new Object)");
+shouldBeTrue("String.prototype.isPrototypeOf(new String)");
+shouldBeTrue("Object.prototype.isPrototypeOf(Array.prototype)");
+shouldBeTrue("Object.prototype.isPrototypeOf(Date.prototype)");
+shouldBeTrue("Object.prototype.isPrototypeOf(Number.prototype)");
+shouldBeTrue("Object.prototype.isPrototypeOf(String.prototype)");
+shouldBeTrue("Object.__proto__.isPrototypeOf(Array)");
+shouldBeTrue("Object.__proto__.isPrototypeOf(Date)");
+shouldBeTrue("Object.__proto__.isPrototypeOf(Number)");
+shouldBeTrue("Object.__proto__.isPrototypeOf(String)");
+
+shouldBeTrue("var wasSet = false; var o = { }; o.__defineGetter__(\"__proto__\", function() { wasSet = true }); o.__proto__; wasSet;");
+shouldBeTrue("var wasSet = false; var o = { }; o.__defineSetter__(\"__proto__\", function() { wasSet = true }); o.__proto__ = {}; wasSet;");
+shouldBeTrue("var wasSet = false; var o = { }; Object.defineProperty(o, \"__proto__\", { \"get\": function() { wasSet = true } }); o.__proto__; wasSet;");
+shouldBeFalse("var wasSet = false; var o = { }; Object.defineProperty(o, \"__proto__\", { \"__proto__\": function(x) { wasSet = true } }); o.__proto__ = {}; wasSet;");
+
+// Deleting Object.prototype.__proto__ removes the ability to set the object's prototype.
+shouldBeTrue("var o = {}; o.__proto__ = { x:true }; o.x");
+shouldBeFalse("var o = {}; o.__proto__ = { x:true }; o.hasOwnProperty('__proto__')");
+delete Object.prototype.__proto__;
+shouldBeUndefined("var o = {}; o.__proto__ = { x:true }; o.x");
+shouldBeTrue("var o = {}; o.__proto__ = { x:true }; o.hasOwnProperty('__proto__')");
diff --git a/test/webkit/reentrant-caching-expected.txt b/test/webkit/reentrant-caching-expected.txt
new file mode 100644 (file)
index 0000000..3257429
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test caching with re-entrancy.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/reentrant-caching.js b/test/webkit/reentrant-caching.js
new file mode 100644 (file)
index 0000000..1db5a17
--- /dev/null
@@ -0,0 +1,112 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+if (this.description)
+    description("Test caching with re-entrancy.");
+
+function test1() {
+    var objects = [{prop:1}, {get prop(){return 2}}];
+
+    function g(o) {
+        return o.prop;
+    }
+
+    for (var i = 0; i < 10000; i++) {
+        var o = {
+            get prop() {
+                try {
+                    g(objects[++j]);
+                }catch(e){
+                }
+                return 1;
+            }
+        };
+        o[i] = i;
+        objects.push(o);
+    }
+    var j=0;
+    g(objects[0]);
+    g(objects[1]);
+    g(objects[2]);
+    g(objects[3]);
+}
+
+
+function test2() {
+    var objects = [Object.create({prop:1}), Object.create({get prop(){return 2}})];
+
+    function g(o) {
+        return o.prop;
+    }
+    var proto = {
+        get prop() {
+            try {
+                g(objects[++j]);
+            }catch(e){
+            }
+            return 1;
+        }
+    };
+    for (var i = 0; i < 10000; i++) {
+        var o = Object.create(proto);
+        o[i] = i;
+        objects.push(o);
+    }
+    var j=0;
+    g(objects[0]);
+    g(objects[1]);
+    g(objects[2]);
+    g(objects[3]);
+}
+
+
+function test3() {
+    var objects = [Object.create(Object.create({prop:1})), Object.create(Object.create({get prop(){return 2}}))];
+
+    function g(o) {
+        return o.prop;
+    }
+    var proto = {
+        get prop() {
+            try {
+                g(objects[++j]);
+            }catch(e){
+            }
+            return 1;
+        }
+    };
+    for (var i = 0; i < 10000; i++) {
+        var o = Object.create(Object.create(proto));
+        o[i] = i;
+        objects.push(o);
+    }
+    var j=0;
+    g(objects[0]);
+    g(objects[1]);
+    g(objects[2]);
+    g(objects[3]);
+}
+
+test1();
+test2();
+test3();
diff --git a/test/webkit/reentrant-call-unwind-expected.txt b/test/webkit/reentrant-call-unwind-expected.txt
new file mode 100644 (file)
index 0000000..b8228b9
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that unwinding of exceptions properly copies registers of activation frames created by reentrant calls to JavaScript.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS f() is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/reentrant-call-unwind.js b/test/webkit/reentrant-call-unwind.js
new file mode 100644 (file)
index 0000000..9d4beb6
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that unwinding of exceptions properly copies registers of activation frames created by reentrant calls to JavaScript."
+);
+
+var f;
+
+try {
+    (function() {
+        var j = 0;
+        f = function() { return j; };
+        throw new Object();
+    }).apply();
+} catch (e) {
+    (function() {
+        shouldBe("f()", "0");
+    }).apply();
+}
diff --git a/test/webkit/regexp-alternatives-expected.txt b/test/webkit/regexp-alternatives-expected.txt
new file mode 100644 (file)
index 0000000..fe53041
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test regular expression processing with alternatives.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS s1.match(/<((\/([^>]+)>)|(([^>]+)>))/) is ["<p>","p>",undefined,undefined,"p>","p"]
+PASS s1.match(/<((ABC>)|(\/([^>]+)>)|(([^>]+)>))/) is ["<p>","p>",undefined,undefined,undefined,"p>","p"]
+PASS s1.match(/<(a|\/p|.+?)>/) is ["<p>","p"]
+PASS s1.match(/<((\/([^>]+)>)|((([^>])+)>))/) is ["<p>","p>",undefined,undefined,"p>","p","p"]
+PASS s1.match(/<((ABC>)|(\/([^>]+)>)|((([^>])+)>))/) is ["<p>","p>",undefined,undefined,undefined,"p>","p","p"]
+PASS s1.match(/<(a|\/p|(.)+?)>/) is ["<p>","p","p"]
+PASS s2.match(/<((\/([^>]+)>)|(([^>]+)>))\5/) is ["<p>p","p>",undefined,undefined,"p>","p"]
+PASS s2.match(/<((ABC>)|(\/([^>]+)>)|(([^>]+)>))\6/) is ["<p>p","p>",undefined,undefined,undefined,"p>","p"]
+PASS s2.match(/<(a|\/p|.+?)>\1/) is ["<p>p","p"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-alternatives.js b/test/webkit/regexp-alternatives.js
new file mode 100644 (file)
index 0000000..b0e5600
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test regular expression processing with alternatives.'
+);
+
+var s1 = "<p>content</p>";
+shouldBe('s1.match(/<((\\/([^>]+)>)|(([^>]+)>))/)', '["<p>","p>",undefined,undefined,"p>","p"]');
+shouldBe('s1.match(/<((ABC>)|(\\/([^>]+)>)|(([^>]+)>))/)', '["<p>","p>",undefined,undefined,undefined,"p>","p"]');
+shouldBe('s1.match(/<(a|\\/p|.+?)>/)', '["<p>","p"]');
+
+// Force YARR to use Interpreter by using iterative parentheses
+shouldBe('s1.match(/<((\\/([^>]+)>)|((([^>])+)>))/)', '["<p>","p>",undefined,undefined,"p>","p","p"]');
+shouldBe('s1.match(/<((ABC>)|(\\/([^>]+)>)|((([^>])+)>))/)', '["<p>","p>",undefined,undefined,undefined,"p>","p","p"]');
+shouldBe('s1.match(/<(a|\\/p|(.)+?)>/)', '["<p>","p","p"]');
+
+// Force YARR to use Interpreter by using backreference
+var s2 = "<p>p</p>";
+shouldBe('s2.match(/<((\\/([^>]+)>)|(([^>]+)>))\\5/)', '["<p>p","p>",undefined,undefined,"p>","p"]');
+shouldBe('s2.match(/<((ABC>)|(\\/([^>]+)>)|(([^>]+)>))\\6/)', '["<p>p","p>",undefined,undefined,undefined,"p>","p"]');
+shouldBe('s2.match(/<(a|\\/p|.+?)>\\1/)', '["<p>p","p"]');
diff --git a/test/webkit/regexp-backreferences-expected.txt b/test/webkit/regexp-backreferences-expected.txt
new file mode 100644 (file)
index 0000000..451ac63
--- /dev/null
@@ -0,0 +1,44 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct behaviour when using backreferences in a RegExp
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /(...)\1$/.test('abcabc') is true
+PASS /(...)\1$/.test('abcdef') is false
+PASS /(...)\2$/.test('abcabc') is false
+PASS /(...)\2$/.test('abc') is false
+PASS /\1(...)$/.test('abcabc') is true
+PASS /\1(...)$/.test('abcdef') is true
+PASS /\2(...)$/.test('abcabc') is false
+PASS /\2(...)$/.test('abc') is false
+PASS /\1?(...)$/.test('abc') is true
+PASS /\1?(...)$/.test('abc') is true
+PASS re.test('axabcd') is false
+PASS re.test('axabcsz') is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-backreferences.js b/test/webkit/regexp-backreferences.js
new file mode 100644 (file)
index 0000000..58db012
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct behaviour when using backreferences in a RegExp");
+
+shouldBeTrue("/(...)\\1$/.test('abcabc')");
+shouldBeFalse("/(...)\\1$/.test('abcdef')");
+shouldBeFalse("/(...)\\2$/.test('abcabc')");
+shouldBeFalse("/(...)\\2$/.test('abc')");
+shouldBeTrue("/\\1(...)$/.test('abcabc')");
+shouldBeTrue("/\\1(...)$/.test('abcdef')");
+shouldBeFalse("/\\2(...)$/.test('abcabc')");
+shouldBeFalse("/\\2(...)$/.test('abc')");
+shouldBeTrue("/\\1?(...)$/.test('abc')");
+shouldBeTrue("/\\1?(...)$/.test('abc')");
+
+re = new RegExp("[^b]*((..)|(\\2))+Sz", "i");
+
+shouldBeFalse("re.test('axabcd')");
+shouldBeTrue("re.test('axabcsz')");
diff --git a/test/webkit/regexp-char-insensitive-expected.txt b/test/webkit/regexp-char-insensitive-expected.txt
new file mode 100644 (file)
index 0000000..2410364
--- /dev/null
@@ -0,0 +1,48 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the case-insensitive matching of character literals.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /å/i.test('/å/') is true
+PASS /å/i.test('/Å/') is true
+PASS /Å/i.test('/å/') is true
+PASS /Å/i.test('/Å/') is true
+PASS /å/i.test('P') is false
+PASS /å/i.test('PASS') is false
+PASS /Å/i.test('P') is false
+PASS /Å/i.test('PASS') is false
+PASS 'PASS'.match(/Å/i) is null
+PASS 'PASS'.match(/Å/i) is null
+PASS 'PASå'.replace(/å/ig, 'S') is 'PASS'
+PASS 'PASå'.replace(/Å/ig, 'S') is 'PASS'
+PASS 'PASÅ'.replace(/å/ig, 'S') is 'PASS'
+PASS 'PASÅ'.replace(/Å/ig, 'S') is 'PASS'
+PASS 'PASS'.replace(/å/ig, '%C3%A5') is 'PASS'
+PASS 'PASS'.replace(/Å/ig, '%C3%A5') is 'PASS'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-char-insensitive.js b/test/webkit/regexp-char-insensitive.js
new file mode 100644 (file)
index 0000000..14a10f6
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks the case-insensitive matching of character literals."
+);
+
+shouldBeTrue("/\u00E5/i.test('/\u00E5/')");
+shouldBeTrue("/\u00E5/i.test('/\u00C5/')");
+shouldBeTrue("/\u00C5/i.test('/\u00E5/')");
+shouldBeTrue("/\u00C5/i.test('/\u00C5/')");
+
+shouldBeFalse("/\u00E5/i.test('P')");
+shouldBeFalse("/\u00E5/i.test('PASS')");
+shouldBeFalse("/\u00C5/i.test('P')");
+shouldBeFalse("/\u00C5/i.test('PASS')");
+
+shouldBeNull("'PASS'.match(/\u00C5/i)");
+shouldBeNull("'PASS'.match(/\u00C5/i)");
+
+shouldBe("'PAS\u00E5'.replace(/\u00E5/ig, 'S')", "'PASS'");
+shouldBe("'PAS\u00E5'.replace(/\u00C5/ig, 'S')", "'PASS'");
+shouldBe("'PAS\u00C5'.replace(/\u00E5/ig, 'S')", "'PASS'");
+shouldBe("'PAS\u00C5'.replace(/\u00C5/ig, 'S')", "'PASS'");
+
+shouldBe("'PASS'.replace(/\u00E5/ig, '%C3%A5')", "'PASS'");
+shouldBe("'PASS'.replace(/\u00C5/ig, '%C3%A5')", "'PASS'");
diff --git a/test/webkit/regexp-character-match-out-of-order-expected.txt b/test/webkit/regexp-character-match-out-of-order-expected.txt
new file mode 100644 (file)
index 0000000..a9d7649
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure RegExp generates single character matches in the correct order
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /[\w']+/.exec("'_'").toString() is "'_'"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-character-match-out-of-order.js b/test/webkit/regexp-character-match-out-of-order.js
new file mode 100644 (file)
index 0000000..1b16550
--- /dev/null
@@ -0,0 +1,26 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Test to ensure RegExp generates single character matches in the correct order');
+
+shouldBe("/[\\w']+/.exec(\"'_'\").toString()", "\"'_'\"");
diff --git a/test/webkit/regexp-compile-crash-expected.txt b/test/webkit/regexp-compile-crash-expected.txt
new file mode 100644 (file)
index 0000000..377e786
--- /dev/null
@@ -0,0 +1,39 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test regexp compiling to make sure it doens't crash like bug 16127
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS !!/\)[;s]+/ is true
+PASS /[/ threw exception SyntaxError: Invalid regular expression: missing /.
+PASS /[a/ threw exception SyntaxError: Invalid regular expression: missing /.
+PASS /[-/ threw exception SyntaxError: Invalid regular expression: missing /.
+PASS !!/(a)\ 1/ is true
+PASS !!/(a)\ 1{1,3}/ is true
+PASS No crashes, yay!
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-compile-crash.js b/test/webkit/regexp-compile-crash.js
new file mode 100644 (file)
index 0000000..87abbcb
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test regexp compiling to make sure it doens't crash like bug 16127");
+
+shouldBeTrue('!!/\\)[;\s]+/');
+shouldThrow('/[/');
+shouldThrow('/[a/');
+shouldThrow('/[-/');
+shouldBeTrue('!!/(a)\1/');
+shouldBeTrue('!!/(a)\1{1,3}/');
+
+testPassed("No crashes, yay!")
diff --git a/test/webkit/regexp-compile-expected.txt b/test/webkit/regexp-compile-expected.txt
new file mode 100644 (file)
index 0000000..d5c59ce
--- /dev/null
@@ -0,0 +1,52 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test RegExp.compile method.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS re.toString() is '/a/i'
+PASS re.multiline is false
+PASS re.ignoreCase is false
+PASS re.global is false
+PASS re.test('A') is false
+PASS re.toString() is '/a/'
+PASS re.toString() is '/b/g'
+PASS re.toString() is '/c/'
+PASS re.ignoreCase is true
+PASS re.test('C') is true
+PASS re.toString() is '/c/i'
+PASS re.compile(new RegExp('c'), 'i'); threw exception TypeError: Cannot supply flags when constructing one RegExp from another.
+PASS re.toString() is '/c/i'
+PASS re.compile(new RegExp('+')); threw exception SyntaxError: Invalid regular expression: /+/: Nothing to repeat.
+PASS re.toString() is '/undefined/'
+PASS re.toString() is '/null/'
+PASS re.toString() is '/(?:)/'
+PASS re.toString() is '/z/'
+PASS re.lastIndex is 0
+PASS re.lastIndex is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-compile.js b/test/webkit/regexp-compile.js
new file mode 100644 (file)
index 0000000..b06ac22
--- /dev/null
@@ -0,0 +1,74 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test RegExp.compile method.'
+);
+
+re = new RegExp("a", "i");
+shouldBe("re.toString()", "'/a/i'");
+
+re.compile("a");
+shouldBe("re.multiline", "false");
+shouldBe("re.ignoreCase", "false");
+shouldBe("re.global", "false");
+shouldBe("re.test('A')", "false");
+shouldBe("re.toString()", "'/a/'");
+
+re.compile("b", "g");
+shouldBe("re.toString()", "'/b/g'");
+
+re.compile(new RegExp("c"));
+shouldBe("re.toString()", "'/c/'");
+
+re.compile(new RegExp("c", "i"));
+shouldBe("re.ignoreCase", "true");
+shouldBe("re.test('C')", "true");
+shouldBe("re.toString()", "'/c/i'");
+
+shouldThrow("re.compile(new RegExp('c'), 'i');");
+
+// It's OK to supply a second argument, as long as the argument is "undefined".
+re.compile(re, undefined);
+shouldBe("re.toString()", "'/c/i'");
+
+shouldThrow("re.compile(new RegExp('+'));");
+
+re.compile(undefined);
+shouldBe("re.toString()", "'/undefined/'");
+
+re.compile(null);
+shouldBe("re.toString()", "'/null/'");
+
+re.compile();
+shouldBe("re.toString()", "'/(?:)/'");
+
+re.compile("z", undefined);
+shouldBe("re.toString()", "'/z/'");
+
+// Compiling should reset lastIndex.
+re.lastIndex = 100;
+re.compile(/a/g);
+shouldBe("re.lastIndex", "0");
+re.exec("aaa");
+shouldBe("re.lastIndex", "1");
diff --git a/test/webkit/regexp-divequal-expected.txt b/test/webkit/regexp-divequal-expected.txt
new file mode 100644 (file)
index 0000000..8de6313
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test JS parser handling of regex literals starting with /=
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /=/.toString() is '/=/'
+PASS /=/.test('') is false
+PASS /=/.test('=') is true
+PASS '='.match(/=/) is ['=']
+PASS '='.match(/\=/) is ['=']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-divequal.js b/test/webkit/regexp-divequal.js
new file mode 100644 (file)
index 0000000..5f06a9a
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Test JS parser handling of regex literals starting with /=');
+
+shouldBe("/=/.toString()", "'/=/'");
+shouldBeFalse("/=/.test('')");
+shouldBeTrue("/=/.test('=')");
+shouldBe("'='.match(/=/)", "['=']");
+shouldBe("'='.match(/\\=/)", "['=']");
diff --git a/test/webkit/regexp-extended-characters-match-expected.txt b/test/webkit/regexp-extended-characters-match-expected.txt
new file mode 100644 (file)
index 0000000..c2a327c
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks regular expressions using extended (> 255) characters and character classes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (new RegExp("[Ā-ā]")).exec("a") is null
+PASS (new RegExp("[Ā]")).exec("a") is null
+PASS (new RegExp("Ā")).exec("a") is null
+PASS (new RegExp("[a]")).exec("a").toString() is "a"
+PASS (new RegExp("[Ā-āa]")).exec("a").toString() is "a"
+PASS (new RegExp("[Āa]")).exec("a").toString() is "a"
+PASS (new RegExp("a")).exec("a").toString() is "a"
+PASS (new RegExp("[a-Ā]")).exec("a").toString() is "a"
+PASS (new RegExp("[Ā]")).exec("Ā").toString() is "Ā"
+PASS (new RegExp("[Ā-ā]")).exec("Ā").toString() is "Ā"
+PASS (new RegExp("Ā")).exec("Ā").toString() is "Ā"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-extended-characters-match.js b/test/webkit/regexp-extended-characters-match.js
new file mode 100644 (file)
index 0000000..de40275
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks regular expressions using extended (> 255) characters and character classes."
+);
+
+// shouldThrow('var r = new RegExp("[\u0101-\u0100]"); r.exec("a")', 'null');
+
+shouldBe('(new RegExp("[\u0100-\u0101]")).exec("a")', 'null');
+shouldBe('(new RegExp("[\u0100]")).exec("a")', 'null');
+shouldBe('(new RegExp("\u0100")).exec("a")', 'null');
+shouldBe('(new RegExp("[\u0061]")).exec("a").toString()', '"a"');
+shouldBe('(new RegExp("[\u0100-\u0101a]")).exec("a").toString()', '"a"');
+shouldBe('(new RegExp("[\u0100a]")).exec("a").toString()', '"a"');
+shouldBe('(new RegExp("\u0061")).exec("a").toString()', '"a"');
+shouldBe('(new RegExp("[a-\u0100]")).exec("a").toString()', '"a"');
+shouldBe('(new RegExp("[\u0100]")).exec("\u0100").toString()', '"\u0100"');
+shouldBe('(new RegExp("[\u0100-\u0101]")).exec("\u0100").toString()', '"\u0100"');
+shouldBe('(new RegExp("\u0100")).exec("\u0100").toString()', '"\u0100"');
diff --git a/test/webkit/regexp-extended-characters-more-expected.txt b/test/webkit/regexp-extended-characters-more-expected.txt
new file mode 100644 (file)
index 0000000..ded2ed1
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks a few cases of extended (> 127) characters in repeat regular expressions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "foo\xa0\xa0\xa0".replace(/\xa0*/, "") is "foo\xa0\xa0\xa0"
+PASS "foo\xa0\xa0\xa0".replace(/\xa0+/, "") is "foo"
+PASS "foo\xa0\xa0\xa0".replace(/\xa0*$/, "") is "foo"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-extended-characters-more.js b/test/webkit/regexp-extended-characters-more.js
new file mode 100644 (file)
index 0000000..9cdf6be
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks a few cases of extended (> 127) characters in repeat regular expressions."
+);
+
+shouldBe('"foo\\xa0\\xa0\\xa0".replace(/\\xa0*/, "")', '"foo\\xa0\\xa0\\xa0"');
+shouldBe('"foo\\xa0\\xa0\\xa0".replace(/\\xa0+/, "")', '"foo"');
+shouldBe('"foo\\xa0\\xa0\\xa0".replace(/\\xa0*$/, "")', '"foo"');
diff --git a/test/webkit/regexp-find-first-asserted-expected.txt b/test/webkit/regexp-find-first-asserted-expected.txt
new file mode 100644 (file)
index 0000000..182a371
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests some regular expressions that were doing the wrong thing with the "find first asserted" optimization.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /.*<body>(.*)<\/body>.*/.exec("foo<body>bar</body>baz").toString() is "foo<body>bar</body>baz,bar"
+PASS /\s*<!--([sS]*)\/\/\s*-->\s*/.exec("<!--// -->").toString() is "<!--// -->,"
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-find-first-asserted.js b/test/webkit/regexp-find-first-asserted.js
new file mode 100644 (file)
index 0000000..ce8628f
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests some regular expressions that were doing the wrong thing with the "find first asserted" optimization.'
+);
+
+shouldBe('/.*<body>(.*)<\\/body>.*/.exec("foo<body>bar</body>baz").toString()', '"foo<body>bar</body>baz,bar"');
+shouldBe('/\\s*<!--([\s\S]*)\\/\\/\\s*-->\\s*/.exec("<!--// -->").toString()', '"<!--// -->,"');
+
+debug('');
diff --git a/test/webkit/regexp-in-and-foreach-handling-expected.txt b/test/webkit/regexp-in-and-foreach-handling-expected.txt
new file mode 100644 (file)
index 0000000..1c675d0
--- /dev/null
@@ -0,0 +1,44 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for bug 31689: RegExp#exec's returned Array-like object behaves differently from regular Arrays
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS testRegExpMatchesArray(0) is ["abcdef", "a", undefined, "c", undefined, "e", undefined]
+PASS testInOperator(0) is ["abcdef", "a", undefined, "c", undefined, "e", undefined]
+PASS testForEachFunction(0) is ["abcdef", "a", undefined, "c", undefined, "e", undefined]
+PASS testRegExpMatchesArray(1) is ["a", "a", undefined]
+PASS testInOperator(1) is ["a", "a", undefined]
+PASS testForEachFunction(1) is ["a", "a", undefined]
+PASS testRegExpMatchesArray(2) is ["xa", undefined, "a"]
+PASS testInOperator(2) is ["xa", undefined, "a"]
+PASS testForEachFunction(2) is ["xa", undefined, "a"]
+PASS testRegExpMatchesArray(3) is ["xa", undefined, "a", undefined]
+PASS testInOperator(3) is ["xa", undefined, "a", undefined]
+PASS testForEachFunction(3) is ["xa", undefined, "a", undefined]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-in-and-foreach-handling.js b/test/webkit/regexp-in-and-foreach-handling.js
new file mode 100644 (file)
index 0000000..a2430db
--- /dev/null
@@ -0,0 +1,72 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test for bug 31689: RegExp#exec's returned Array-like object behaves differently from regular Arrays");
+
+var tests = [
+    [ /(a)(_)?.+(c)(_)?.+(e)(_)?.+/, 'abcdef', '["abcdef", "a", undefined, "c", undefined, "e", undefined]' ],
+    [ /(a)(_)?/, 'abcdef', '["a", "a", undefined]' ],
+    [ /(_)?.+(a)/, 'xabcdef', '["xa", undefined, "a"]' ],
+    [ /(_)?.+(a)(_)?/, 'xabcdef', '["xa", undefined, "a", undefined]' ],
+];
+
+function testRegExpMatchesArray(i)
+{
+    return tests[i][0].exec(tests[i][1]);
+}
+
+function testInOperator(i)
+{
+    var re = tests[i][0],
+        str = tests[i][1],
+        inArray = [],
+        matches = re.exec(str);
+
+    for (var j = 0; j < matches.length; j++) {
+        if (j in matches) {
+            inArray.push(matches[j]);
+        }
+    }
+    return inArray;
+}
+
+function testForEachFunction(i)
+{
+    var re = tests[i][0],
+        str = tests[i][1],
+        inArray = [],
+        matches = re.exec(str);
+
+    matches.forEach(function(m) {
+        inArray.push(m);
+    });
+    return inArray;
+
+}
+
+for (var i in tests) {
+    shouldBe('testRegExpMatchesArray(' + i + ')', tests[i][2]);
+    shouldBe('testInOperator(' + i + ')', tests[i][2]);
+    shouldBe('testForEachFunction(' + i + ')', tests[i][2]);
+}
+
diff --git a/test/webkit/regexp-literals-arent-constants-expected.txt b/test/webkit/regexp-literals-arent-constants-expected.txt
new file mode 100644 (file)
index 0000000..415e020
--- /dev/null
@@ -0,0 +1,39 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test ensures that regeular expression literals are constants, and so persist over multiple executions
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS currentRegExp === lastRegExp is false
+PASS currentRegExp === lastRegExp is false
+PASS returnRegExpLiteral() === returnRegExpLiteral() is false
+PASS returnConditionalRegExpLiteral(true) === returnConditionalRegExpLiteral(true) is false
+PASS returnConditionalRegExpLiteral(false) === returnConditionalRegExpLiteral(false) is false
+PASS returnConditionalRegExpLiteral(true) === returnConditionalRegExpLiteral(false) is false
+PASS returnRegExpLiteral().someAddedProperty is undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-literals-arent-constants.js b/test/webkit/regexp-literals-arent-constants.js
new file mode 100644 (file)
index 0000000..4932f72
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This test ensures that regeular expression literals are constants, and so persist over multiple executions");
+
+for (var i = 0; i < 2; i++) {
+    currentRegExp = /a/;
+    if (i)
+        shouldBeFalse("currentRegExp === lastRegExp");
+    lastRegExp = currentRegExp;
+}
+
+function test1() {
+    for (var i = 0; i < 2; i++) {
+        currentRegExp = /a/;
+        if (i)
+            shouldBeFalse("currentRegExp === lastRegExp");
+        lastRegExp = currentRegExp;
+    }
+}
+test1();
+
+function returnRegExpLiteral() { return /a/ }
+
+shouldBeFalse("returnRegExpLiteral() === returnRegExpLiteral()");
+
+function returnConditionalRegExpLiteral(first) {
+    if (first)
+        return /a/;
+    return /a/;
+}
+
+shouldBeFalse("returnConditionalRegExpLiteral(true) === returnConditionalRegExpLiteral(true)");
+shouldBeFalse("returnConditionalRegExpLiteral(false) === returnConditionalRegExpLiteral(false)");
+shouldBeFalse("returnConditionalRegExpLiteral(true) === returnConditionalRegExpLiteral(false)");
+returnRegExpLiteral().someAddedProperty = true;
+shouldBeUndefined("returnRegExpLiteral().someAddedProperty");
diff --git a/test/webkit/regexp-many-brackets-expected.txt b/test/webkit/regexp-many-brackets-expected.txt
new file mode 100644 (file)
index 0000000..a94955b
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test regular expression processing with many capturing brackets (200).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 'hello'.match(manyBracketsRegExp) is manyHellosArray
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-many-brackets.js b/test/webkit/regexp-many-brackets.js
new file mode 100644 (file)
index 0000000..7c4b959
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test regular expression processing with many capturing brackets (200).'
+);
+
+var count = 200;
+
+var regexp = "";
+for (var i = 0; i < count; ++i)
+    regexp += "(";
+regexp += "hello";
+for (var i = 0; i < count; ++i)
+    regexp += ")";
+
+var manyHellosArray = new Array;
+for (var i = 0; i <= count; ++i)
+    manyHellosArray[i] = "hello";
+
+var manyBracketsRegExp = new RegExp(regexp);
+shouldBe("'hello'.match(manyBracketsRegExp)", "manyHellosArray");
+
+debug('');
diff --git a/test/webkit/regexp-negative-special-characters-expected.txt b/test/webkit/regexp-negative-special-characters-expected.txt
new file mode 100644 (file)
index 0000000..bf7675d
--- /dev/null
@@ -0,0 +1,74 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks Unicode in negative RegExp character classes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "\s", " \t\f\v\r\n".
+PASS "\S", "Проверка".
+PASS "\s", "Проверка".
+PASS "[\s]", "Проверка".
+PASS "[\S]", "Проверка".
+PASS "[^\s]", "Проверка".
+PASS "[^\S]", "Проверка".
+PASS "[\s\S]*", "\u2002Проверка\r\n\u00a0".
+PASS "\S\S", "уф".
+PASS "\S{2}", "уф".
+PASS "\w", "Проверка".
+PASS "\W", "Проверка".
+PASS "[\w]", "Проверка".
+PASS "[\W]", "Проверка".
+PASS "[^\w]", "Проверка".
+PASS "[^\W]", "Проверка".
+PASS "\W\W", "уф".
+PASS "\W{2}", "уф".
+PASS "\d", "Проверка".
+PASS "\D", "Проверка".
+PASS "[\d]", "Проверка".
+PASS "[\D]", "Проверка".
+PASS "[^\d]", "Проверка".
+PASS "[^\D]", "Проверка".
+PASS "\D\D", "уф".
+PASS "\D{2}", "уф".
+PASS "[\S\d]", "Проверка123".
+PASS "[\d\S]", "Проверка123".
+PASS "[^\S\d]", "Проверка123".
+PASS "[^\d\S]", "Проверка123".
+PASS "[ \S]", " Проверка ".
+PASS "[\S ]", " Проверка ".
+PASS "[ф \S]", " Проверка ".
+PASS "[\Sф ]", " Проверка ".
+PASS "[^р\S]", " Проверка ".
+PASS "[^\Sр]", " Проверка ".
+PASS "[^р\s]", " Проверка ".
+PASS "[^\sр]", " Проверка ".
+PASS "[ф \s\S]", "Проверка \r\n".
+PASS "[\S\sф ]", "Проверка \r\n".
+PASS "[^z]", "Проверка \r\n".
+PASS "[^ф]", "Проверка \r\n".
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-negative-special-characters.js b/test/webkit/regexp-negative-special-characters.js
new file mode 100644 (file)
index 0000000..f9fede4
--- /dev/null
@@ -0,0 +1,86 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks Unicode in negative RegExp character classes."
+);
+
+function test(pattern, str, expected_length) {
+  var result = eval('"' + str + '"').replace(new RegExp(pattern, 'img'), '');
+
+  if (result.length == expected_length)
+    testPassed('"' + pattern + '", ' + '"' + str + '".');
+  else
+    testFailed('"' + pattern + '", ' + '"' + str + '". Was "' + result + '".');
+}
+
+
+test("\\s", " \\t\\f\\v\\r\\n", 0); // ASCII whitespace.
+test("\\S", "Проверка", 0); // Cyrillic letters are non-whitespace...
+test("\\s", "Проверка", 8); // ...and they aren't whitespace.
+test("[\\s]", "Проверка", 8);
+test("[\\S]", "Проверка", 0);
+test("[^\\s]", "Проверка", 0);
+test("[^\\S]", "Проверка", 8);
+test("[\\s\\S]*", "\\u2002Проверка\\r\\n\\u00a0", 0);
+test("\\S\\S", "уф", 0);
+test("\\S{2}", "уф", 0);
+
+test("\\w", "Проверка", 8); // Alas, only ASCII characters count as word ones in JS.
+test("\\W", "Проверка", 0);
+test("[\\w]", "Проверка", 8);
+test("[\\W]", "Проверка", 0);
+test("[^\\w]", "Проверка", 0);
+test("[^\\W]", "Проверка", 8);
+test("\\W\\W", "уф", 0);
+test("\\W{2}", "уф", 0);
+
+test("\\d", "Проверка", 8); // Digit and non-digit.
+test("\\D", "Проверка", 0);
+test("[\\d]", "Проверка", 8);
+test("[\\D]", "Проверка", 0);
+test("[^\\d]", "Проверка", 0);
+test("[^\\D]", "Проверка", 8);
+test("\\D\\D", "уф", 0);
+test("\\D{2}", "уф", 0);
+
+test("[\\S\\d]", "Проверка123", 0);
+test("[\\d\\S]", "Проверка123", 0);
+test("[^\\S\\d]", "Проверка123", 11);
+test("[^\\d\\S]", "Проверка123", 11);
+
+test("[ \\S]", " Проверка ", 0);
+test("[\\S ]", " Проверка ", 0);
+test("[ф \\S]", " Проверка ", 0);
+test("[\\Sф ]", " Проверка ", 0);
+
+test("[^р\\S]", " Проверка ", 8);
+test("[^\\Sр]", " Проверка ", 8);
+test("[^р\\s]", " Проверка ", 4);
+test("[^\\sр]", " Проверка ", 4);
+
+test("[ф \\s\\S]", "Проверка \\r\\n", 0);
+test("[\\S\\sф ]", "Проверка \\r\\n", 0);
+
+test("[^z]", "Проверка \\r\\n", 0);
+test("[^ф]", "Проверка \\r\\n", 0);
diff --git a/test/webkit/regexp-non-bmp-expected.txt b/test/webkit/regexp-non-bmp-expected.txt
new file mode 100644 (file)
index 0000000..28d78e2
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that regular expressions treat non-BMP characters as two separate characters. From a Unicode correctness point of view this is wrong, but it is what other browsers do. And given that we store strings as UTF-16, it is also more efficient to implement. Also test some other cases related to UTF-8 and UTF-16.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /./.exec(surrogatePair).toString().length is 1
+PASS /\D/.exec(surrogatePair).toString().length is 1
+PASS /\S/.exec(surrogatePair).toString().length is 1
+PASS /\W/.exec(surrogatePair).toString().length is 1
+PASS /[^x]/.exec(surrogatePair).toString().length is 1
+
+PASS /.{1,2}/.exec("!!" + String.fromCharCode(0xA1)).toString().length is 2
+PASS /./.exec("") is null
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-non-bmp.js b/test/webkit/regexp-non-bmp.js
new file mode 100644 (file)
index 0000000..0711251
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests that regular expressions treat non-BMP characters as two separate characters. '
++ 'From a Unicode correctness point of view this is wrong, but it is what other browsers do. '
++ 'And given that we store strings as UTF-16, it is also more efficient to implement. '
++ 'Also test some other cases related to UTF-8 and UTF-16.'
+);
+
+var surrogatePair = String.fromCharCode(0xD800) + String.fromCharCode(0xDC00);
+
+shouldBe('/./.exec(surrogatePair).toString().length', '1');
+shouldBe('/\\D/.exec(surrogatePair).toString().length', '1');
+shouldBe('/\\S/.exec(surrogatePair).toString().length', '1');
+shouldBe('/\\W/.exec(surrogatePair).toString().length', '1');
+shouldBe('/[^x]/.exec(surrogatePair).toString().length', '1');
+
+debug('');
+
+shouldBe('/.{1,2}/.exec("!!" + String.fromCharCode(0xA1)).toString().length', '2');
+shouldBe('/./.exec("")', 'null');
+
+debug('');
diff --git a/test/webkit/regexp-non-character-expected.txt b/test/webkit/regexp-non-character-expected.txt
new file mode 100644 (file)
index 0000000..7c566fb
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for regular expressions with non-character values in them, specifically in character classes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "F".match(/[\uD7FF]/) is null
+PASS "0".match(/[\uD800]/) is null
+PASS "F".match(/[\uDFFF]/) is null
+PASS "E".match(/[\uE000]/) is null
+PASS "y".match(/[\uFDBF]/) is null
+PASS "y".match(/[\uFDD0]/) is null
+PASS "y".match(/[\uFDEF]/) is null
+PASS "y".match(/[\uFDF0]/) is null
+PASS "y".match(/[\uFEFF]/) is null
+PASS "y".match(/[\uFEFF]/) is null
+PASS "y".match(/[\uFFFE]/) is null
+PASS "y".match(/[\uFFFF]/) is null
+PASS "y".match(/[\u10FFFF]/) is null
+PASS "y".match(/[\u110000]/) is null
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-non-character.js b/test/webkit/regexp-non-character.js
new file mode 100644 (file)
index 0000000..1dfed02
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test for regular expressions with non-character values in them, specifically in character classes.'
+);
+
+shouldBe('"F".match(/[\\uD7FF]/)', 'null');
+shouldBe('"0".match(/[\\uD800]/)', 'null');
+shouldBe('"F".match(/[\\uDFFF]/)', 'null');
+shouldBe('"E".match(/[\\uE000]/)', 'null');
+shouldBe('"y".match(/[\\uFDBF]/)', 'null');
+shouldBe('"y".match(/[\\uFDD0]/)', 'null');
+shouldBe('"y".match(/[\\uFDEF]/)', 'null');
+shouldBe('"y".match(/[\\uFDF0]/)', 'null');
+shouldBe('"y".match(/[\\uFEFF]/)', 'null');
+shouldBe('"y".match(/[\\uFEFF]/)', 'null');
+shouldBe('"y".match(/[\\uFFFE]/)', 'null');
+shouldBe('"y".match(/[\\uFFFF]/)', 'null');
+shouldBe('"y".match(/[\\u10FFFF]/)', 'null');
+shouldBe('"y".match(/[\\u110000]/)', 'null');
diff --git a/test/webkit/regexp-norepeat-expected.txt b/test/webkit/regexp-norepeat-expected.txt
new file mode 100644 (file)
index 0000000..f46c8a5
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for https://bugs.webkit.org/show_bug.cgi?id=46077
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS re.test(str) is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-norepeat.js b/test/webkit/regexp-norepeat.js
new file mode 100644 (file)
index 0000000..bab6020
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test for https://bugs.webkit.org/show_bug.cgi?id=46077'
+);
+
+var re = /^b|^cd/;
+var str = "abcd";
+shouldBe('re.test(str)', 'false');
diff --git a/test/webkit/regexp-range-bound-ffff-expected.txt b/test/webkit/regexp-range-bound-ffff-expected.txt
new file mode 100644 (file)
index 0000000..1769c3c
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for rdar:/68455379, a case-insensitive regex containing a character class containing a range with an upper bound of ￿ can lead to an infinite-loop.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS ("A".match(/[\ 1-￿]/i) == "A") is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-range-bound-ffff.js b/test/webkit/regexp-range-bound-ffff.js
new file mode 100644 (file)
index 0000000..51663db
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+'Test for rdar:/68455379, a case-insensitive regex containing a character class containing a range with an upper bound of \uFFFF can lead to an infinite-loop.'
+
+);
+
+shouldBe('("A".match(/[\u0001-\uFFFF]/i) == "A")', 'true');
diff --git a/test/webkit/regexp-zero-length-alternatives-expected.txt b/test/webkit/regexp-zero-length-alternatives-expected.txt
new file mode 100644 (file)
index 0000000..3efbe4f
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test regular expression processing with alternatives that match consuming no characters
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS emptyStr.match(re1) is [""]
+PASS s1.match(re1) is [""]
+PASS s2.match(re1) is ["aaaa"]
+PASS s3.match(re1) is ["aa"]
+PASS emptyStr.match(re2) is [""]
+PASS s1.match(re2) is [""]
+PASS s2.match(re2) is ["aaaa"]
+PASS s3.match(re2) is ["aa"]
+PASS emptyStr.match(re3) is [""]
+PASS s1.match(re3) is [""]
+PASS s2.match(re3) is ["aaaa"]
+PASS s3.match(re3) is ["aa"]
+PASS emptyStr.match(re4) is ["", undefined]
+PASS s1.match(re4) is ["", undefined]
+PASS s2.match(re4) is ["aaaa", "a"]
+PASS s3.match(re4) is ["aa", "a"]
+PASS emptyStr.match(re5) is ["", undefined]
+PASS s1.match(re5) is ["", undefined]
+PASS s2.match(re5) is ["aaaa", "a"]
+PASS s3.match(re5) is ["aa", "a"]
+PASS emptyStr.match(re6) is ["", undefined]
+PASS s1.match(re6) is ["", undefined]
+PASS s2.match(re6) is ["aaaa", "a"]
+PASS s3.match(re6) is ["aa", "a"]
+PASS emptyStr.match(re7) is [""]
+PASS s1.match(re7) is [""]
+PASS s2.match(re7) is ["aaa"]
+PASS s3.match(re7) is ["aa"]
+PASS emptyStr.match(re8) is [""]
+PASS s1.match(re8) is [""]
+PASS s2.match(re8) is ["aaaa"]
+PASS s3.match(re8) is ["aa"]
+PASS emptyStr.match(re9) is [""]
+PASS s1.match(re9) is [""]
+PASS s2.match(re9) is ["aaaa"]
+PASS s3.match(re9) is ["aa"]
+PASS emptyStr.match(re10) is [""]
+PASS s1.match(re10) is [""]
+PASS s2.match(re10) is [""]
+PASS s3.match(re10) is [""]
+PASS emptyStr.match(re11) is [""]
+PASS s1.match(re11) is [""]
+PASS s2.match(re11) is [""]
+PASS s3.match(re11) is [""]
+PASS emptyStr.match(re12) is [""]
+PASS s1.match(re12) is [""]
+PASS s2.match(re12) is [""]
+PASS s3.match(re12) is [""]
+PASS emptyStr.match(re13) is ["", undefined]
+PASS s1.match(re13) is ["", undefined]
+PASS s2.match(re13) is ["", undefined]
+PASS s3.match(re13) is ["", undefined]
+PASS emptyStr.match(re14) is ["", undefined]
+PASS s1.match(re14) is ["", undefined]
+PASS s2.match(re14) is ["", undefined]
+PASS s3.match(re14) is ["", undefined]
+PASS emptyStr.match(re15) is ["", undefined]
+PASS s1.match(re15) is ["", undefined]
+PASS s2.match(re15) is ["", undefined]
+PASS s3.match(re15) is ["", undefined]
+PASS emptyStr.match(re16) is [""]
+PASS s1.match(re16) is [""]
+PASS s2.match(re16) is ["a"]
+PASS s3.match(re16) is ["a"]
+PASS emptyStr.match(re17) is [""]
+PASS s1.match(re17) is [""]
+PASS s2.match(re17) is ["a"]
+PASS s3.match(re17) is ["a"]
+PASS emptyStr.match(re18) is [""]
+PASS s1.match(re18) is [""]
+PASS s2.match(re18) is ["a"]
+PASS s3.match(re18) is ["a"]
+PASS emptyStr.match(re19) is ["", undefined]
+PASS s1.match(re19) is ["", undefined]
+PASS s2.match(re19) is ["a", "a"]
+PASS s3.match(re19) is ["a", "a"]
+PASS emptyStr.match(re20) is ["", undefined]
+PASS s1.match(re20) is ["", undefined]
+PASS s2.match(re20) is ["a", "a"]
+PASS s3.match(re20) is ["a", "a"]
+PASS emptyStr.match(re21) is ["", undefined]
+PASS s1.match(re21) is ["", undefined]
+PASS s2.match(re21) is ["a", "a"]
+PASS s3.match(re21) is ["a", "a"]
+PASS emptyStr.match(re22) is [""]
+PASS s1.match(re22) is [""]
+PASS s2.match(re22) is [""]
+PASS s3.match(re22) is [""]
+PASS emptyStr.match(re23) is [""]
+PASS s1.match(re23) is [""]
+PASS s2.match(re23) is [""]
+PASS s3.match(re23) is [""]
+PASS emptyStr.match(re24) is [""]
+PASS s1.match(re24) is [""]
+PASS s2.match(re24) is [""]
+PASS s3.match(re24) is [""]
+PASS emptyStr.match(re25) is ["", undefined]
+PASS s1.match(re25) is ["", undefined]
+PASS s2.match(re25) is ["", undefined]
+PASS s3.match(re25) is ["", undefined]
+PASS emptyStr.match(re26) is ["", undefined]
+PASS s1.match(re26) is ["", undefined]
+PASS s2.match(re26) is ["", undefined]
+PASS s3.match(re26) is ["", undefined]
+PASS emptyStr.match(re27) is ["", undefined]
+PASS s1.match(re27) is ["", undefined]
+PASS s2.match(re27) is ["", undefined]
+PASS s3.match(re27) is ["", undefined]
+PASS emptyStr.match(re28) is null
+PASS s1.match(re28) is ["x"]
+PASS s2.match(re28) is null
+PASS s3.match(re28) is ["aax"]
+PASS emptyStr.match(re29) is null
+PASS s1.match(re29) is ["x"]
+PASS s2.match(re29) is null
+PASS s3.match(re29) is ["aax"]
+PASS emptyStr.match(re30) is null
+PASS s1.match(re30) is ["x"]
+PASS s2.match(re30) is null
+PASS s3.match(re30) is ["aax"]
+PASS emptyStr.match(re31) is [""]
+PASS s1.match(re31) is [""]
+PASS s3.match(re31) is ["aa"]
+PASS s4.match(re31) is ["abab"]
+PASS emptyStr.match(re32) is [""]
+PASS s1.match(re32) is [""]
+PASS s2.match(re32) is ["aaaa"]
+PASS s4.match(re32) is ["abab"]
+PASS s5.match(re32) is ["ab"]
+PASS s6.match(re32) is [""]
+PASS emptyStr.match(re33) is [""]
+PASS s1.match(re33) is [""]
+PASS s7.match(re33) is ["g0"]
+PASS emptyStr.match(re34) is [""]
+PASS s1.match(re34) is [""]
+PASS s2.match(re34) is [""]
+PASS s3.match(re34) is [""]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/regexp-zero-length-alternatives.js b/test/webkit/regexp-zero-length-alternatives.js
new file mode 100644 (file)
index 0000000..6e18de0
--- /dev/null
@@ -0,0 +1,275 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test regular expression processing with alternatives that match consuming no characters'
+);
+
+var emptyStr = "";
+var s1 = "xxxx";
+var s2 = "aaaa";
+var s3 = "aax";
+var s4 = "abab";
+var s5 = "ab";
+var s6 = "xabx";
+var s7 = "g0";
+
+// Non-capturing empty first alternative greedy '*'
+var re1 = new RegExp(/(?:|a|z)*/);
+shouldBe('emptyStr.match(re1)', '[""]');
+shouldBe('s1.match(re1)', '[""]');
+shouldBe('s2.match(re1)', '["aaaa"]');
+shouldBe('s3.match(re1)', '["aa"]');
+
+// Non-capturing empty middle alternative greedy '*'
+var re2 = new RegExp(/(?:a||z)*/);
+shouldBe('emptyStr.match(re2)', '[""]');
+shouldBe('s1.match(re2)', '[""]');
+shouldBe('s2.match(re2)', '["aaaa"]');
+shouldBe('s3.match(re2)', '["aa"]');
+
+// Non-capturing empty last alternative greedy '*'
+var re3 = new RegExp(/(?:a|z|)*/);
+shouldBe('emptyStr.match(re3)', '[""]');
+shouldBe('s1.match(re3)', '[""]');
+shouldBe('s2.match(re3)', '["aaaa"]');
+shouldBe('s3.match(re3)', '["aa"]');
+
+// Capturing empty first alternative greedy '*'
+var re4 = new RegExp(/(|a|z)*/);
+shouldBe('emptyStr.match(re4)', '["", undefined]');
+shouldBe('s1.match(re4)', '["", undefined]');
+shouldBe('s2.match(re4)', '["aaaa", "a"]');
+shouldBe('s3.match(re4)', '["aa", "a"]');
+
+// Capturing empty middle alternative greedy '*'
+var re5 = new RegExp(/(a||z)*/);
+shouldBe('emptyStr.match(re5)', '["", undefined]');
+shouldBe('s1.match(re5)', '["", undefined]');
+shouldBe('s2.match(re5)', '["aaaa", "a"]');
+shouldBe('s3.match(re5)', '["aa", "a"]');
+
+// Capturing empty last alternative greedy '*'
+var re6 = new RegExp(/(a|z|)*/);
+shouldBe('emptyStr.match(re6)', '["", undefined]');
+shouldBe('s1.match(re6)', '["", undefined]');
+shouldBe('s2.match(re6)', '["aaaa", "a"]');
+shouldBe('s3.match(re6)', '["aa", "a"]');
+
+// Non-capturing empty first alternative fixed-count
+var re7 = new RegExp(/(?:|a|z){2,5}/);
+shouldBe('emptyStr.match(re7)', '[""]');
+shouldBe('s1.match(re7)', '[""]');
+shouldBe('s2.match(re7)', '["aaa"]');
+shouldBe('s3.match(re7)', '["aa"]');
+
+// Non-capturing empty middle alternative fixed-count
+var re8 = new RegExp(/(?:a||z){2,5}/);
+shouldBe('emptyStr.match(re8)', '[""]');
+shouldBe('s1.match(re8)', '[""]');
+shouldBe('s2.match(re8)', '["aaaa"]');
+shouldBe('s3.match(re8)', '["aa"]');
+
+// Non-capturing empty last alternative fixed-count
+var re9 = new RegExp(/(?:a|z|){2,5}/);
+shouldBe('emptyStr.match(re9)', '[""]');
+shouldBe('s1.match(re9)', '[""]');
+shouldBe('s2.match(re9)', '["aaaa"]');
+shouldBe('s3.match(re9)', '["aa"]');
+
+// Non-capturing empty first alternative non-greedy '*'
+var re10 = new RegExp(/(?:|a|z)*?/);
+shouldBe('emptyStr.match(re10)', '[""]');
+shouldBe('s1.match(re10)', '[""]');
+shouldBe('s2.match(re10)', '[""]');
+shouldBe('s3.match(re10)', '[""]');
+
+// Non-capturing empty middle alternative non-greedy '*'
+var re11 = new RegExp(/(?:a||z)*?/);
+shouldBe('emptyStr.match(re11)', '[""]');
+shouldBe('s1.match(re11)', '[""]');
+shouldBe('s2.match(re11)', '[""]');
+shouldBe('s3.match(re11)', '[""]');
+
+// Non-capturing empty last alternative non-greedy '*'
+var re12 = new RegExp(/(?:a|z|)*?/);
+shouldBe('emptyStr.match(re12)', '[""]');
+shouldBe('s1.match(re12)', '[""]');
+shouldBe('s2.match(re12)', '[""]');
+shouldBe('s3.match(re12)', '[""]');
+
+// Capturing empty first alternative non-greedy '*'
+var re13 = new RegExp(/(|a|z)*?/);
+shouldBe('emptyStr.match(re13)', '["", undefined]');
+shouldBe('s1.match(re13)', '["", undefined]');
+shouldBe('s2.match(re13)', '["", undefined]');
+shouldBe('s3.match(re13)', '["", undefined]');
+
+// Capturing empty middle alternative non-greedy '*'
+var re14 = new RegExp(/(a||z)*?/);
+shouldBe('emptyStr.match(re14)', '["", undefined]');
+shouldBe('s1.match(re14)', '["", undefined]');
+shouldBe('s2.match(re14)', '["", undefined]');
+shouldBe('s3.match(re14)', '["", undefined]');
+
+// Capturing empty last alternative non-greedy '*'
+var re15 = new RegExp(/(a|z|)*?/);
+shouldBe('emptyStr.match(re15)', '["", undefined]');
+shouldBe('s1.match(re15)', '["", undefined]');
+shouldBe('s2.match(re15)', '["", undefined]');
+shouldBe('s3.match(re15)', '["", undefined]');
+
+// Non-capturing empty first alternative greedy '?'
+var re16 = new RegExp(/(?:|a|z)?/);
+shouldBe('emptyStr.match(re16)', '[""]');
+shouldBe('s1.match(re16)', '[""]');
+shouldBe('s2.match(re16)', '["a"]');
+shouldBe('s3.match(re16)', '["a"]');
+
+// Non-capturing empty middle alternative greedy '?'
+var re17 = new RegExp(/(?:a||z)?/);
+shouldBe('emptyStr.match(re17)', '[""]');
+shouldBe('s1.match(re17)', '[""]');
+shouldBe('s2.match(re17)', '["a"]');
+shouldBe('s3.match(re17)', '["a"]');
+
+// Non-capturing empty last alternative greedy '?'
+var re18 = new RegExp(/(?:a|z|)?/);
+shouldBe('emptyStr.match(re18)', '[""]');
+shouldBe('s1.match(re18)', '[""]');
+shouldBe('s2.match(re18)', '["a"]');
+shouldBe('s3.match(re18)', '["a"]');
+
+// Capturing empty first alternative greedy '?'
+var re19 = new RegExp(/(|a|z)?/);
+shouldBe('emptyStr.match(re19)', '["", undefined]');
+shouldBe('s1.match(re19)', '["", undefined]');
+shouldBe('s2.match(re19)', '["a", "a"]');
+shouldBe('s3.match(re19)', '["a", "a"]');
+
+// Capturing empty middle alternative greedy '?'
+var re20 = new RegExp(/(a||z)?/);
+shouldBe('emptyStr.match(re20)', '["", undefined]');
+shouldBe('s1.match(re20)', '["", undefined]');
+shouldBe('s2.match(re20)', '["a", "a"]');
+shouldBe('s3.match(re20)', '["a", "a"]');
+
+// Capturing empty last alternative greedy '?'
+var re21 = new RegExp(/(a|z|)?/);
+shouldBe('emptyStr.match(re21)', '["", undefined]');
+shouldBe('s1.match(re21)', '["", undefined]');
+shouldBe('s2.match(re21)', '["a", "a"]');
+shouldBe('s3.match(re21)', '["a", "a"]');
+
+// Non-capturing empty first alternative non-greedy '?'
+var re22 = new RegExp(/(?:|a|z)??/);
+shouldBe('emptyStr.match(re22)', '[""]');
+shouldBe('s1.match(re22)', '[""]');
+shouldBe('s2.match(re22)', '[""]');
+shouldBe('s3.match(re22)', '[""]');
+
+// Non-capturing empty middle alternative non-greedy '?'
+var re23 = new RegExp(/(?:a||z)??/);
+shouldBe('emptyStr.match(re23)', '[""]');
+shouldBe('s1.match(re23)', '[""]');
+shouldBe('s2.match(re23)', '[""]');
+shouldBe('s3.match(re23)', '[""]');
+
+// Non-capturing empty last alternative non-greedy '?'
+var re24 = new RegExp(/(?:a|z|)??/);
+shouldBe('emptyStr.match(re24)', '[""]');
+shouldBe('s1.match(re24)', '[""]');
+shouldBe('s2.match(re24)', '[""]');
+shouldBe('s3.match(re24)', '[""]');
+
+// Capturing empty first alternative non-greedy '?'
+var re25 = new RegExp(/(|a|z)??/);
+shouldBe('emptyStr.match(re25)', '["", undefined]');
+shouldBe('s1.match(re25)', '["", undefined]');
+shouldBe('s2.match(re25)', '["", undefined]');
+shouldBe('s3.match(re25)', '["", undefined]');
+
+// Capturing empty middle alternative non-greedy '?'
+var re26 = new RegExp(/(a||z)??/);
+shouldBe('emptyStr.match(re26)', '["", undefined]');
+shouldBe('s1.match(re26)', '["", undefined]');
+shouldBe('s2.match(re26)', '["", undefined]');
+shouldBe('s3.match(re26)', '["", undefined]');
+
+// Capturing empty last alternative non-greedy '?'
+var re27 = new RegExp(/(a|z|)??/);
+shouldBe('emptyStr.match(re27)', '["", undefined]');
+shouldBe('s1.match(re27)', '["", undefined]');
+shouldBe('s2.match(re27)', '["", undefined]');
+shouldBe('s3.match(re27)', '["", undefined]');
+
+// Non-capturing empty first alternative greedy '*' non-terminal
+var re28 = new RegExp(/(?:|a|z)*x/);
+shouldBe('emptyStr.match(re28)', 'null');
+shouldBe('s1.match(re28)', '["x"]');
+shouldBe('s2.match(re28)', 'null');
+shouldBe('s3.match(re28)', '["aax"]');
+
+// Non-capturing empty middle alternative greedy '*' non-terminal
+var re29 = new RegExp(/(?:a||z)*x/);
+shouldBe('emptyStr.match(re29)', 'null');
+shouldBe('s1.match(re29)', '["x"]');
+shouldBe('s2.match(re29)', 'null');
+shouldBe('s3.match(re29)', '["aax"]');
+
+// Non-capturing empty last alternative greedy '*' non-terminal
+var re30 = new RegExp(/(?:a|z|)*x/);
+shouldBe('emptyStr.match(re30)', 'null');
+shouldBe('s1.match(re30)', '["x"]');
+shouldBe('s2.match(re30)', 'null');
+shouldBe('s3.match(re30)', '["aax"]');
+
+// Non-capturing two possibly empty alternatives greedy '*'
+var re31 = new RegExp(/(?:a*|b*)*/);
+shouldBe('emptyStr.match(re31)', '[""]');
+shouldBe('s1.match(re31)', '[""]');
+shouldBe('s3.match(re31)', '["aa"]');
+shouldBe('s4.match(re31)', '["abab"]');
+
+// Non-capturing two possibly empty non-greedy alternatives non-greedy '*'
+var re32 = new RegExp(/(?:a*?|b*?)*/);
+shouldBe('emptyStr.match(re32)', '[""]');
+shouldBe('s1.match(re32)', '[""]');
+shouldBe('s2.match(re32)', '["aaaa"]');
+shouldBe('s4.match(re32)', '["abab"]');
+shouldBe('s5.match(re32)', '["ab"]');
+shouldBe('s6.match(re32)', '[""]');
+
+// Three possibly empty alternatives with greedy +
+var re33 = new RegExp(/(?:(?:(?!))|g?|0*\*?)+/);
+shouldBe('emptyStr.match(re33)', '[""]');
+shouldBe('s1.match(re33)', '[""]');
+shouldBe('s7.match(re33)', '["g0"]');
+
+// first alternative zero length fixed count
+var re34 = new RegExp(/(?:|a)/);
+shouldBe('emptyStr.match(re34)', '[""]');
+shouldBe('s1.match(re34)', '[""]');
+shouldBe('s2.match(re34)', '[""]');
+shouldBe('s3.match(re34)', '[""]');
+
diff --git a/test/webkit/registerCachingAcrossBranchTargets-expected.txt b/test/webkit/registerCachingAcrossBranchTargets-expected.txt
new file mode 100644 (file)
index 0000000..e36bbcd
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test makes sure we don't incorrectly cache virtual registers in system registers across VM branches
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (true ? function(){ return true; } : a.b)() is true
+PASS (function(){ return true; } || a.b)() is true
+PASS (function(){ return (true ? function(){return true;} : a.b)(); })() is true
+PASS (function(){ return (function(){return true;} || a.b)(); })() is true
+PASS (function(){ var i = 0; var result = false; var a = {c:true}.c; do { result = a; i++; } while (i < 2); return result; })() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/registerCachingAcrossBranchTargets.js b/test/webkit/registerCachingAcrossBranchTargets.js
new file mode 100644 (file)
index 0000000..e2e3e7c
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test makes sure we don't incorrectly cache virtual registers in system registers across VM branches"
+);
+
+shouldBeTrue("(true ? function(){ return true; } : a.b)()");
+shouldBeTrue("(function(){ return true; } || a.b)()");
+shouldBeTrue("(function(){ return (true ? function(){return true;} : a.b)(); })()");
+shouldBeTrue("(function(){ return (function(){return true;} || a.b)(); })()");
+shouldBeTrue("(function(){ var i = 0; var result = false; var a = {c:true}.c; do { result = a; i++; } while (i < 2); return result; })()");
diff --git a/test/webkit/rehash-assign-expected.txt b/test/webkit/rehash-assign-expected.txt
new file mode 100644 (file)
index 0000000..b4c9d7c
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that assignments to global variables behave properly when the property table is rehashed.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 1 is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/rehash-assign.js b/test/webkit/rehash-assign.js
new file mode 100644 (file)
index 0000000..72aae07
--- /dev/null
@@ -0,0 +1,136 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Tests that assignments to global variables behave properly when the property table is rehashed.");
+
+var result;
+
+result = (function() {
+    a = 0;
+    b = 1;
+    c = 2;
+    d = 3;
+    e = 4;
+    f = 5;
+    g = 6;
+    h = 7;
+    i = 8
+    j = 9;
+    k = 10;
+    l = 11;
+    m = 12;
+    n = 13;
+    o = 14;
+    p = 15;
+    q = 16;
+    r = 17;
+    s = 18;
+    t = 19;
+    u = 20;
+    v = 21;
+    w = 22;
+    x = 23;
+    y = 24;
+    z = 25;
+    aa = 0;
+    bb = 1;
+    cc = 2;
+    dd = 3;
+    ee = 4;
+    ff = 5;
+    gg = 6;
+    hh = 7;
+    ii = 8;
+    jj = 9;
+    kk = 10;
+    ll = 11;
+    mm = 12;
+    nn = 13;
+    oo = 14;
+    pp = 15;
+    qq = 16;
+    rr = 17;
+    ss = 18;
+    tt = 19;
+    uu = 20;
+    vv = 21;
+    ww = 22;
+    xx = 23;
+    yy = 24;
+    zz = 25;
+    aaa = 0;
+    bbb = 1;
+    ccc = 2;
+    ddd = 3;
+    eee = 4;
+    fff = 5;
+    ggg = 6;
+    hhh = 7;
+    iii = 8;
+    jjj = 9;
+    kkk = 10;
+    lll = 11;
+    mmm = 12;
+    nnn = 13;
+    ooo = 14;
+    ppp = 15;
+    qqq = 16;
+    rrr = 17;
+    sss = 18;
+    ttt = 19;
+    uuu = 20;
+    vvv = 21;
+    www = 22;
+    xxx = 23;
+    yyy = 24;
+    zzz = 25;
+    aaaa = 0;
+    bbbb = 1;
+    cccc = 2;
+    dddd = 3;
+    eeee = 4;
+    ffff = 5;
+    gggg = 6;
+    hhhh = 7;
+    iiii = 8;
+    jjjj = 9;
+    kkkk = 10;
+    llll = 11;
+    mmmm = 12;
+    nnnn = 13;
+    oooo = 14;
+    pppp = 15;
+    qqqq = 16;
+    rrrr = 17;
+    ssss = 18;
+    tttt = 19;
+    uuuu = 20;
+    vvvv = 21;
+    wwww = 22;
+    xxxx = 23;
+    yyyy = 24;
+    zzzz = 25;
+    return 1;
+})();
+
+shouldBe(result.toString(), "1");
diff --git a/test/webkit/reserved-words-expected.txt b/test/webkit/reserved-words-expected.txt
new file mode 100644 (file)
index 0000000..51c7265
--- /dev/null
@@ -0,0 +1,95 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This file checks which ECMAScript 3 keywords are treated as reserved words.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+SHOULD BE RESERVED:
+PASS isReserved('break') is true
+PASS isReserved('case') is true
+PASS isReserved('catch') is true
+PASS isReserved('class') is true
+PASS isReserved('const') is true
+PASS isReserved('continue') is true
+PASS isReserved('debugger') is true
+PASS isReserved('default') is true
+PASS isReserved('delete') is true
+PASS isReserved('do') is true
+PASS isReserved('else') is true
+PASS isReserved('enum') is true
+PASS isReserved('export') is true
+PASS isReserved('extends') is true
+PASS isReserved('false') is true
+PASS isReserved('finally') is true
+PASS isReserved('for') is true
+PASS isReserved('function') is true
+PASS isReserved('if') is true
+PASS isReserved('import') is true
+PASS isReserved('in') is true
+PASS isReserved('instanceof') is true
+PASS isReserved('new') is true
+PASS isReserved('null') is true
+PASS isReserved('return') is true
+PASS isReserved('super') is true
+PASS isReserved('switch') is true
+PASS isReserved('this') is true
+PASS isReserved('throw') is true
+PASS isReserved('true') is true
+PASS isReserved('try') is true
+PASS isReserved('typeof') is true
+PASS isReserved('var') is true
+PASS isReserved('void') is true
+PASS isReserved('while') is true
+PASS isReserved('with') is true
+
+SHOULD NOT BE RESERVED:
+PASS isReserved('abstract') is false
+PASS isReserved('boolean') is false
+PASS isReserved('byte') is false
+PASS isReserved('char') is false
+PASS isReserved('double') is false
+PASS isReserved('final') is false
+PASS isReserved('float') is false
+PASS isReserved('goto') is false
+PASS isReserved('implements') is false
+PASS isReserved('int') is false
+PASS isReserved('interface') is false
+PASS isReserved('long') is false
+PASS isReserved('native') is false
+PASS isReserved('package') is false
+PASS isReserved('private') is false
+PASS isReserved('protected') is false
+PASS isReserved('public') is false
+PASS isReserved('short') is false
+PASS isReserved('static') is false
+PASS isReserved('synchronized') is false
+PASS isReserved('throws') is false
+PASS isReserved('transient') is false
+PASS isReserved('volatile') is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/reserved-words.js b/test/webkit/reserved-words.js
new file mode 100644 (file)
index 0000000..6e62cc1
--- /dev/null
@@ -0,0 +1,118 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+function isReserved(word)
+{
+    try {
+        eval("var " + word + ";");
+        return false;
+    } catch (e) {
+        return true;
+    }
+}
+
+var reservedWords = [
+    "break",
+    "case",
+    "catch",
+    "class",
+    "const",
+    "continue",
+    "debugger",
+    "default",
+    "delete",
+    "do",
+    "else",
+    "enum",
+    "export",
+    "extends",
+    "false",
+    "finally",
+    "for",
+    "function",
+    "if",
+    "import",
+    "in",
+    "instanceof",
+    "new",
+    "null",
+    "return",
+    "super",
+    "switch",
+    "this",
+    "throw",
+    "true",
+    "try",
+    "typeof",
+    "var",
+    "void",
+    "while",
+    "with"
+];
+
+var unreservedWords = [
+    "abstract",
+    "boolean",
+    "byte",
+    "char",
+    "double",
+    "final",
+    "float",
+    "goto",
+    "implements",
+    "int",
+    "interface",
+    "long",
+    "native",
+    "package",
+    "private",
+    "protected",
+    "public",
+    "short",
+    "static",
+    "synchronized",
+    "throws",
+    "transient",
+    "volatile"
+];
+
+description(
+"This file checks which ECMAScript 3 keywords are treated as reserved words."
+);
+
+reservedWords.sort();
+unreservedWords.sort();
+
+debug("SHOULD BE RESERVED:");
+for (var p in reservedWords) {
+    shouldBeTrue("isReserved('" + reservedWords[p] + "')");
+}
+
+debug("");
+
+debug("SHOULD NOT BE RESERVED:");
+for (var p in unreservedWords) {
+    shouldBeFalse("isReserved('" + unreservedWords[p] + "')");
+}
+
+debug("");
diff --git a/test/webkit/resize-array-assign-expected.txt b/test/webkit/resize-array-assign-expected.txt
new file mode 100644 (file)
index 0000000..5c72cf0
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that assignments into arrays behave properly after the array is resized.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 1 is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/resize-array-assign.js b/test/webkit/resize-array-assign.js
new file mode 100644 (file)
index 0000000..20d101f
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Tests that assignments into arrays behave properly after the array is resized.")
+
+function resize(X) {
+  X[9999] = 0;
+  return 1;
+}
+
+function getZerothEntry(X) {
+  return X[0];
+}
+
+var A = new Array();
+A[0] = 0;
+A[0] = resize(A);
+
+shouldBe(getZerothEntry(A).toString(), "1");
diff --git a/test/webkit/resolve-arguments-from-scope-expected.txt b/test/webkit/resolve-arguments-from-scope-expected.txt
new file mode 100644 (file)
index 0000000..1c08f7c
--- /dev/null
@@ -0,0 +1,332 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that doing repeated resolves of 'arguments' from some nested scope doesn't crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS foo(42)[0] is 42
+PASS foo(42).length is 1
+PASS foo(42, 23)[1] is 23
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/resolve-arguments-from-scope.js b/test/webkit/resolve-arguments-from-scope.js
new file mode 100644 (file)
index 0000000..def7158
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that doing repeated resolves of 'arguments' from some nested scope doesn't crash."
+);
+
+function bar() {
+    throw "omg";
+}
+
+function foo() {
+    try {
+        bar();
+    } catch (e) {
+        return arguments;
+    }
+}
+
+for (var i = 0; i < 100; ++i) {
+    shouldBe("foo(42)[0]", "42");
+    shouldBe("foo(42).length", "1");
+    shouldBe("foo(42, 23)[1]", "23");
+}
+
diff --git a/test/webkit/slash-lineterminator-parse-expected.txt b/test/webkit/slash-lineterminator-parse-expected.txt
new file mode 100644 (file)
index 0000000..2961957
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for correct handling ofr backslash-newline in JS strings.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS mystring is "hellothere"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/slash-lineterminator-parse.js b/test/webkit/slash-lineterminator-parse.js
new file mode 100644 (file)
index 0000000..b7a05bf
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks for correct handling ofr backslash-newline in JS strings."
+);
+
+mystring = 'hello\
+there';
+shouldBe('mystring', '"hellothere"');
diff --git a/test/webkit/sort-large-array-expected.txt b/test/webkit/sort-large-array-expected.txt
new file mode 100644 (file)
index 0000000..dd4a10b
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests sorting an array with more than 10,000 values.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test.length is 10010
+PASS test[9999] is 9999
+PASS test[10000] is 10000
+PASS test.slice(0, 20).join(', ') is '0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19'
+PASS test.slice(9990, 10010).join(', ') is '9990, 9991, 9992, 9993, 9994, 9995, 9996, 9997, 9998, 9999, 10000, 10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10009'
+PASS testNoValues.length is 10110
+PASS testNoValues[9999] is undefined
+PASS testNoValues[10000] is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/sort-large-array.js b/test/webkit/sort-large-array.js
new file mode 100644 (file)
index 0000000..43eed3f
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This tests sorting an array with more than 10,000 values.");
+
+var test = [];
+for (var i = 0; i < 10010; i++)
+    test.push(10009 - i);
+test.sort(function(a, b) {return a - b;});
+
+shouldBe("test.length", "10010");
+shouldBe("test[9999]", "9999");
+shouldBe("test[10000]", "10000");
+shouldBe("test.slice(0, 20).join(', ')", "'0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19'");
+shouldBe("test.slice(9990, 10010).join(', ')", "'9990, 9991, 9992, 9993, 9994, 9995, 9996, 9997, 9998, 9999, 10000, 10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10009'");
+
+var testNoValues = [];
+testNoValues.length = 10110;
+testNoValues.sort(function(a, b) {return a < b;});
+
+shouldBe("testNoValues.length", "10110");
+shouldBe("testNoValues[9999]", "undefined");
+shouldBe("testNoValues[10000]", "undefined");
diff --git a/test/webkit/sort-no-jit-code-crash-expected.txt b/test/webkit/sort-no-jit-code-crash-expected.txt
new file mode 100644 (file)
index 0000000..1ae90b1
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that non-numeric sort functions always have JIT code. This test passes if it does not crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/sort-no-jit-code-crash.js b/test/webkit/sort-no-jit-code-crash.js
new file mode 100644 (file)
index 0000000..1b495ac
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that non-numeric sort functions always have JIT code. This test passes if it does not crash."
+);
+
+function f()
+{
+}
+
+[].sort(f);
+
+function g()
+{
+}
+
+function h(x)
+{
+    x();
+}
+
+h(g);
+h(g);
+h(g);
+h(f);
diff --git a/test/webkit/sort-non-numbers-expected.txt b/test/webkit/sort-non-numbers-expected.txt
new file mode 100644 (file)
index 0000000..b5c7c85
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests numerically sorting an array of non-numbers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS String(test) is '1,2,3'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/sort-non-numbers.js b/test/webkit/sort-non-numbers.js
new file mode 100644 (file)
index 0000000..cd92c3a
--- /dev/null
@@ -0,0 +1,31 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This tests numerically sorting an array of non-numbers.");
+
+var test = [ "2", "1", "3" ];
+test.sort(function (v1, v2) {
+    return v1 - v2;
+});
+
+shouldBe("String(test)", "'1,2,3'");
diff --git a/test/webkit/sort-randomly-expected.txt b/test/webkit/sort-randomly-expected.txt
new file mode 100644 (file)
index 0000000..03828c5
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that passing an inconsistent compareFn to sort() doesn't cause a crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/sort-randomly.js b/test/webkit/sort-randomly.js
new file mode 100644 (file)
index 0000000..bd18472
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that passing an inconsistent compareFn to sort() doesn't cause a crash."
+);
+
+for (var attempt = 0; attempt < 100; ++attempt) {
+    var arr = [];
+    for (var i = 0; i < 64; ++i)
+        arr[i] = i;
+    arr.sort(function() { return 0.5 - Math.random(); });
+}
+
+// Sorting objects that change each time sort() looks at them is the same as using a random compareFn.
+function RandomObject() {
+    this.toString = function() { return (Math.random() * 100).toString(); }
+}
+
+for (var attempt = 0; attempt < 100; ++attempt) {
+    var arr = [];
+    for (var i = 0; i < 64; ++i)
+        arr[i] = new RandomObject;
+    arr.sort();
+}
diff --git a/test/webkit/sort-with-side-effecting-comparisons-expected.txt b/test/webkit/sort-with-side-effecting-comparisons-expected.txt
new file mode 100644 (file)
index 0000000..fbe8a31
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Checks that sorting an array with a side-effecting comparison function doesn't trigger assertions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS It worked.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/sort-with-side-effecting-comparisons.js b/test/webkit/sort-with-side-effecting-comparisons.js
new file mode 100644 (file)
index 0000000..5dda02f
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Checks that sorting an array with a side-effecting comparison function doesn't trigger assertions."
+);
+
+var array = [];
+
+for (var i = 0; i < 20000; ++i)
+    array.push(i);
+
+array.sort(function(a, b) {
+    array.shift();
+    if (a < b)
+        return -1;
+    if (a > b)
+        return 1;
+    return 0;
+});
+
+testPassed("It worked.");
+
+
diff --git a/test/webkit/sparse-array-expected.txt b/test/webkit/sparse-array-expected.txt
new file mode 100644 (file)
index 0000000..510f5ec
--- /dev/null
@@ -0,0 +1,45 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests some sparse array operations.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS array[0] is undefined
+PASS array[49999] is undefined
+PASS array[50000] is 100
+PASS array[50001] is undefined
+PASS array[0] is NaN
+PASS array[49999] is undefined
+PASS array[50000] is 100
+PASS array[50001] is undefined
+PASS array[0] is NaN
+PASS array[49999] is undefined
+PASS array[50000] is 100
+PASS array[50001] is undefined
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/sparse-array.js b/test/webkit/sparse-array.js
new file mode 100644 (file)
index 0000000..f471a3a
--- /dev/null
@@ -0,0 +1,50 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This tests some sparse array operations.'
+);
+
+var array = [ ];
+
+array[50000] = 100;
+
+shouldBe('array[0]', 'undefined');
+shouldBe('array[49999]', 'undefined');
+shouldBe('array[50000]', '100');
+shouldBe('array[50001]', 'undefined');
+array[0]++;
+shouldBe('array[0]', 'NaN');
+shouldBe('array[49999]', 'undefined');
+shouldBe('array[50000]', '100');
+shouldBe('array[50001]', 'undefined');
+// This tests oscillation between being sparse and dense.
+delete array[50000];
+array.length = 5;
+array[50000] = 100;
+shouldBe('array[0]', 'NaN');
+shouldBe('array[49999]', 'undefined');
+shouldBe('array[50000]', '100');
+shouldBe('array[50001]', 'undefined');
+
+debug('');
diff --git a/test/webkit/stack-overflow-catch-expected.txt b/test/webkit/stack-overflow-catch-expected.txt
new file mode 100644 (file)
index 0000000..70786a8
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test that when the stack overflows, the exception goes to the last frame before the overflow
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS gotWrongCatch is false
+PASS (stackLevel) is (level - 1)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/stack-overflow-catch.js b/test/webkit/stack-overflow-catch.js
new file mode 100644 (file)
index 0000000..440148e
--- /dev/null
@@ -0,0 +1,76 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Test that when the stack overflows, the exception goes to the last frame before the overflow');
+
+var level = 0;
+var stackLevel = 0;
+var gotWrongCatch = false;
+
+function test1()
+{
+    var myLevel = level;
+    var dummy;
+
+    try {
+        level = level + 1;
+        // Dummy code to make this funciton different from test2()
+        dummy = level * level + 1;
+        if (dummy == 0)
+            debug('Should never get here!!!!');
+    } catch(err) {
+        gotWrongCatch = true;
+    }
+
+    try {
+        test2();
+    } catch(err) {
+        stackLevel = myLevel;
+    }
+}
+
+function test2()
+{
+    var myLevel = level;
+
+    // Dummy code to make this funciton different from test1()
+    if (gotWrongCatch)
+        debug('Should never get here!!!!');
+
+    try {
+        level = level + 1;
+    } catch(err) {
+        gotWrongCatch = true;
+    }
+
+    try {
+        test1();
+    } catch(err) {
+        stackLevel = myLevel;
+    }
+}
+
+test1();
+
+shouldBeFalse("gotWrongCatch");
+shouldBe("(stackLevel)", "(level - 1)");
diff --git a/test/webkit/stack-unwinding-expected.txt b/test/webkit/stack-unwinding-expected.txt
new file mode 100644 (file)
index 0000000..afb1225
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that JavaScriptCore does not crash when uwinding the stack that includes a host function.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Two host functions called in a row.
+WARN: shouldBe() expects string arguments
+PASS 5,6,7 is 5,6,7
+PASS Exception thrown and caught
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/stack-unwinding.js b/test/webkit/stack-unwinding.js
new file mode 100644 (file)
index 0000000..8c737fa
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+"This test checks that JavaScriptCore does not crash when uwinding the stack that includes a host function."
+
+);
+
+function twoHostFunctions() {
+    var stack = [];
+    stack.push({ "args": twoHostFunctions.arguments });
+    stack.push({ "args": twoHostFunctions.arguments });
+    testPassed("Two host functions called in a row.");
+}
+
+function arrayOperatorFunction(element) {
+    return element + 5;
+}
+
+var myArray = new Array (0, 1, 2);
+function hostCallsUser(array) {
+    return array.map(arrayOperatorFunction);
+}
+
+function throwException() {
+    throw "Exception thrown";
+}
+
+function hostAndException() {
+    var stack = [];
+    stack.push({ "args": hostAndException.arguments });
+    throwException();
+}
+
+twoHostFunctions();
+myArray = hostCallsUser(myArray);
+shouldBe(myArray, new Array( 5, 6, 7 ) );
+
+try {
+    hostAndException();
+} catch (e) {
+    testPassed("Exception thrown and caught");
+}
+
diff --git a/test/webkit/statement-list-register-crash-expected.txt b/test/webkit/statement-list-register-crash-expected.txt
new file mode 100644 (file)
index 0000000..217ad1e
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that code generation of statement lists properly reference counts registers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS f() is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/statement-list-register-crash.js b/test/webkit/statement-list-register-crash.js
new file mode 100644 (file)
index 0000000..b35908e
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests that code generation of statement lists properly reference counts registers.'
+);
+
+function f()
+{
+    for(; ; i++) {
+        a = 0;
+
+        if (1)
+            return true;
+    }
+}
+
+shouldBeTrue("f()");
diff --git a/test/webkit/static-scope-object-expected.txt b/test/webkit/static-scope-object-expected.txt
new file mode 100644 (file)
index 0000000..b628095
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test ensures that the correct "this" object is used when calling named function expressions or exceptions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS namedFunctionExpression() is globalObject
+PASS throwingFunctionAsException() is globalObject
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/static-scope-object.js b/test/webkit/static-scope-object.js
new file mode 100644 (file)
index 0000000..90b4ef5
--- /dev/null
@@ -0,0 +1,43 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('This test ensures that the correct "this" object is used when calling named function expressions or exceptions.');
+
+this.toString = function() { return "the global object" };
+var globalObject = this;
+
+function namedFunctionExpression() {
+    return function f(i) { if (i > 0) return this; return f(1); }(0);
+}
+
+shouldBe("namedFunctionExpression()", 'globalObject');
+
+function throwingFunctionAsException() {
+    try {
+        throw function(){ return this; }
+    } catch(e) {
+        return e();
+    }
+}
+
+shouldBe("throwingFunctionAsException()", 'globalObject');
diff --git a/test/webkit/strict-callback-this-expected.txt b/test/webkit/strict-callback-this-expected.txt
new file mode 100644 (file)
index 0000000..6154d97
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that a call to array/string prototype methods pass the correct this value (undefined) to strict callees.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS testArrayPrototypeSort(strictThrowThisString) is undefinedString
+PASS testArrayPrototypeFilter(strictThrowThisString) is undefinedString
+PASS testArrayPrototypeMap(strictThrowThisString) is undefinedString
+PASS testArrayPrototypeEvery(strictThrowThisString) is undefinedString
+PASS testArrayPrototypeForEach(strictThrowThisString) is undefinedString
+PASS testArrayPrototypeSome(strictThrowThisString) is undefinedString
+PASS testStringPrototypeReplace(strictThrowThisString) is undefinedString
+PASS testArrayPrototypeSort(nonstrictThrowThisString) is globalObjectString
+PASS testArrayPrototypeFilter(nonstrictThrowThisString) is globalObjectString
+PASS testArrayPrototypeMap(nonstrictThrowThisString) is globalObjectString
+PASS testArrayPrototypeEvery(nonstrictThrowThisString) is globalObjectString
+PASS testArrayPrototypeForEach(nonstrictThrowThisString) is globalObjectString
+PASS testArrayPrototypeSome(nonstrictThrowThisString) is globalObjectString
+PASS testStringPrototypeReplace(nonstrictThrowThisString) is globalObjectString
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/strict-callback-this.js b/test/webkit/strict-callback-this.js
new file mode 100644 (file)
index 0000000..8e1ea6b
--- /dev/null
@@ -0,0 +1,126 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that a call to array/string prototype methods pass the correct this value (undefined) to strict callees."
+);
+
+var undefinedString = String(undefined);
+var globalObjectString = String(this);
+
+function strictThrowThisString()
+{
+    "use strict";
+    throw String(this);
+}
+
+function nonstrictThrowThisString()
+{
+    throw String(this);
+}
+
+function testArrayPrototypeSort(callback)
+{
+    try {
+        [1,2].sort(callback);
+    } catch (e) {
+        return e;
+    }
+    return "FAILED";
+}
+
+function testArrayPrototypeFilter(callback)
+{
+    try {
+        [1,2].filter(callback);
+    } catch (e) {
+        return e;
+    }
+    return "FAILED";
+}
+
+function testArrayPrototypeMap(callback)
+{
+    try {
+        [1,2].map(callback);
+    } catch (e) {
+        return e;
+    }
+    return "FAILED";
+}
+
+function testArrayPrototypeEvery(callback)
+{
+    try {
+        [1,2].every(callback);
+    } catch (e) {
+        return e;
+    }
+    return "FAILED";
+}
+
+function testArrayPrototypeForEach(callback)
+{
+    try {
+        [1,2].forEach(callback);
+    } catch (e) {
+        return e;
+    }
+    return "FAILED";
+}
+
+function testArrayPrototypeSome(callback)
+{
+    try {
+        [1,2].some(callback);
+    } catch (e) {
+        return e;
+    }
+    return "FAILED";
+}
+
+function testStringPrototypeReplace(callback)
+{
+    try {
+        "1,2".replace('1', callback);
+    } catch (e) {
+        return e;
+    }
+    return "FAILED";
+}
+
+shouldBe('testArrayPrototypeSort(strictThrowThisString)', 'undefinedString');
+shouldBe('testArrayPrototypeFilter(strictThrowThisString)', 'undefinedString');
+shouldBe('testArrayPrototypeMap(strictThrowThisString)', 'undefinedString');
+shouldBe('testArrayPrototypeEvery(strictThrowThisString)', 'undefinedString');
+shouldBe('testArrayPrototypeForEach(strictThrowThisString)', 'undefinedString');
+shouldBe('testArrayPrototypeSome(strictThrowThisString)', 'undefinedString');
+shouldBe('testStringPrototypeReplace(strictThrowThisString)', 'undefinedString');
+
+shouldBe('testArrayPrototypeSort(nonstrictThrowThisString)', 'globalObjectString');
+shouldBe('testArrayPrototypeFilter(nonstrictThrowThisString)', 'globalObjectString');
+shouldBe('testArrayPrototypeMap(nonstrictThrowThisString)', 'globalObjectString');
+shouldBe('testArrayPrototypeEvery(nonstrictThrowThisString)', 'globalObjectString');
+shouldBe('testArrayPrototypeForEach(nonstrictThrowThisString)', 'globalObjectString');
+shouldBe('testArrayPrototypeSome(nonstrictThrowThisString)', 'globalObjectString');
+shouldBe('testStringPrototypeReplace(nonstrictThrowThisString)', 'globalObjectString');
diff --git a/test/webkit/strict-throw-type-error-expected.txt b/test/webkit/strict-throw-type-error-expected.txt
new file mode 100644 (file)
index 0000000..607498e
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ThrowTypeError is a singleton object
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS functionCaller1 === functionCaller2 is true
+PASS functionCaller1 === functionArguments1 is true
+PASS functionCaller1 === argumentsCaller1 is true
+PASS functionCaller1 === argumentsCallee1 is true
+PASS functionCaller1 === boundCaller1 is true
+PASS functionCaller1 === boundArguments1 is true
+PASS functionCaller2 === functionArguments2 is true
+PASS functionCaller2 === argumentsCaller2 is true
+PASS functionCaller2 === argumentsCallee2 is true
+PASS functionCaller2 === boundCaller2 is true
+PASS functionCaller2 === boundArguments2 is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/strict-throw-type-error.js b/test/webkit/strict-throw-type-error.js
new file mode 100644 (file)
index 0000000..c9e34a3
--- /dev/null
@@ -0,0 +1,73 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("ThrowTypeError is a singleton object");
+
+function getter(object, name)
+{
+    Object.getOwnPropertyDescriptor(object, name).get;
+}
+
+function strictArgumentsFunction1()
+{
+    "use strict";
+    return arguments;
+}
+var strictArguments1 = strictArgumentsFunction1();
+var boundFunction1 = strictArgumentsFunction1.bind();
+var functionCaller1 = getter(strictArgumentsFunction1, "caller");
+var functionArguments1 = getter(strictArgumentsFunction1, "arguments");
+var argumentsCaller1 = getter(strictArguments1, "caller");
+var argumentsCallee1 = getter(strictArguments1, "callee");
+var boundCaller1 = getter(boundFunction1, "caller");
+var boundArguments1 = getter(boundFunction1, "arguments");
+
+function strictArgumentsFunction2()
+{
+    "use strict";
+    return arguments;
+}
+var strictArguments2 = strictArgumentsFunction2();
+var boundFunction2 = strictArgumentsFunction2.bind();
+var functionCaller2 = getter(strictArgumentsFunction2, "caller");
+var functionArguments2 = getter(strictArgumentsFunction2, "arguments");
+var argumentsCaller2 = getter(strictArguments2, "caller");
+var argumentsCallee2 = getter(strictArguments2, "callee");
+var boundCaller2 = getter(boundFunction2, "caller");
+var boundArguments2 = getter(boundFunction2, "arguments");
+
+shouldBeTrue('functionCaller1 === functionCaller2');
+
+shouldBeTrue('functionCaller1 === functionArguments1');
+shouldBeTrue('functionCaller1 === argumentsCaller1');
+shouldBeTrue('functionCaller1 === argumentsCallee1');
+shouldBeTrue('functionCaller1 === boundCaller1');
+shouldBeTrue('functionCaller1 === boundArguments1');
+
+shouldBeTrue('functionCaller2 === functionArguments2');
+shouldBeTrue('functionCaller2 === argumentsCaller2');
+shouldBeTrue('functionCaller2 === argumentsCallee2');
+shouldBeTrue('functionCaller2 === boundCaller2');
+shouldBeTrue('functionCaller2 === boundArguments2');
+
+successfullyParsed = true;
diff --git a/test/webkit/string-from-char-code-expected.txt b/test/webkit/string-from-char-code-expected.txt
new file mode 100644 (file)
index 0000000..694149e
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test ensures that String.fromCharCode doesn't crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS String.fromCharCode(88) is "X"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/string-from-char-code.js b/test/webkit/string-from-char-code.js
new file mode 100644 (file)
index 0000000..a07c075
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test ensures that String.fromCharCode doesn't crash."
+);
+
+shouldBe('String.fromCharCode(88)', '"X"');
diff --git a/test/webkit/string-index-overflow-expected.txt b/test/webkit/string-index-overflow-expected.txt
new file mode 100644 (file)
index 0000000..f01eb41
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that accessing a string by an out of bounds index doesn't crash, furthermore the string should not appear to have out-of-bounds numeric properties.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "x"[10] is undefined.
+PASS "x".hasOwnProperty(10) is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/string-index-overflow.js b/test/webkit/string-index-overflow.js
new file mode 100644 (file)
index 0000000..362bbd0
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that accessing a string by an out of bounds index doesn't crash, furthermore the string should not appear to have out-of-bounds numeric properties."
+);
+
+shouldBeUndefined('"x"[10]');
+shouldBeFalse('"x".hasOwnProperty(10)');
diff --git a/test/webkit/string-property-deletion-expected.txt b/test/webkit/string-property-deletion-expected.txt
new file mode 100644 (file)
index 0000000..08e23ab
--- /dev/null
@@ -0,0 +1,46 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests deletion of properties on a string object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS str.length is 3
+PASS delete str.length is false
+PASS delete str[0] is false
+PASS delete str[1] is false
+PASS delete str[2] is false
+PASS delete str[3] is true
+PASS delete str[-1] is true
+PASS delete str[4294967294] is true
+PASS delete str[4294967295] is true
+PASS delete str[4294967296] is true
+PASS delete str[0.0] is false
+PASS delete str[0.1] is true
+PASS delete str['0.0'] is true
+PASS delete str.foo is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/string-property-deletion.js b/test/webkit/string-property-deletion.js
new file mode 100644 (file)
index 0000000..204dc9b
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This page tests deletion of properties on a string object.");
+
+var str = "abc";
+shouldBe('str.length', '3');
+shouldBe('delete str.length', 'false');
+shouldBe('delete str[0]', 'false');
+shouldBe('delete str[1]', 'false');
+shouldBe('delete str[2]', 'false');
+shouldBe('delete str[3]', 'true');
+shouldBe('delete str[-1]', 'true');
+shouldBe('delete str[4294967294]', 'true');
+shouldBe('delete str[4294967295]', 'true');
+shouldBe('delete str[4294967296]', 'true');
+shouldBe('delete str[0.0]', 'false');
+shouldBe('delete str[0.1]', 'true');
+shouldBe('delete str[\'0.0\']', 'true');
+shouldBe('delete str.foo', 'true');
diff --git a/test/webkit/string-property-iteration-expected.txt b/test/webkit/string-property-iteration-expected.txt
new file mode 100644 (file)
index 0000000..cf3cb5b
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests iteration of properties on a string object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS stringProperties.length is 5
+PASS stringProperties[0] is "0"
+PASS stringProperties[1] is "1"
+PASS stringProperties[2] is "2"
+PASS stringProperties[3] is "3"
+PASS stringProperties[4] is "4"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/string-property-iteration.js b/test/webkit/string-property-iteration.js
new file mode 100644 (file)
index 0000000..30e2e7a
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This page tests iteration of properties on a string object.");
+
+var stringProperties = new Array();
+var i = 0;
+for (var property in "abcde") {
+    stringProperties[i++] = property;
+}
+
+shouldBe('stringProperties.length', '5');
+shouldBe('stringProperties[0]', '"0"');
+shouldBe('stringProperties[1]', '"1"');
+shouldBe('stringProperties[2]', '"2"');
+shouldBe('stringProperties[3]', '"3"');
+shouldBe('stringProperties[4]', '"4"');
diff --git a/test/webkit/string-slice-abnormal-values-expected.txt b/test/webkit/string-slice-abnormal-values-expected.txt
new file mode 100644 (file)
index 0000000..e9b4a67
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for handling of abnormal values passed to String.slice
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "abc".slice(0) is "abc"
+PASS "abc".slice(0, Infinity) is "abc"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/string-slice-abnormal-values.js b/test/webkit/string-slice-abnormal-values.js
new file mode 100644 (file)
index 0000000..dda6569
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks for handling of abnormal values passed to String.slice"
+);
+
+shouldBe('"abc".slice(0)', '"abc"');
+shouldBe('"abc".slice(0, Infinity)', '"abc"');
diff --git a/test/webkit/string-sort-expected.txt b/test/webkit/string-sort-expected.txt
new file mode 100644 (file)
index 0000000..79548fe
--- /dev/null
@@ -0,0 +1,52 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests sorting of string values
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "12" < "123" is true
+PASS ["12","123"].sort().toString() is "12,123"
+PASS "123" < "13" is true
+PASS ["123","13"].sort().toString() is "123,13"
+PASS "" < " " is true
+PASS [""," "].sort().toString() is ", "
+PASS "close" < "closed" is true
+PASS ["close","closed"].sort().toString() is "close,closed"
+PASS "a" < "~" is true
+PASS ["a","~"].sort().toString() is "a,~"
+PASS "_" < "a" is true
+PASS ["_","a"].sort().toString() is "_,a"
+PASS "0" < "A" is true
+PASS ["0","A"].sort().toString() is "0,A"
+PASS "-" < "0" is true
+PASS ["-","0"].sort().toString() is "-,0"
+PASS " " < "-" is true
+PASS [" ","-"].sort().toString() is " ,-"
+PASS "A" < "ABC" is true
+PASS ["A","ABC"].sort().toString() is "A,ABC"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/string-sort.js b/test/webkit/string-sort.js
new file mode 100644 (file)
index 0000000..df4cacb
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This page tests sorting of string values");
+
+function shouldBeInThisOrder(a)
+{
+    shouldBeTrue('"' + a[0] + '"' + " < " + '"' + a[1] + '"');
+    shouldBe('[' + '"' + a[0] + '"' + ',' + '"' + a[1] + '"' + '].sort().toString()', '"' + a + '"');
+}
+
+shouldBeInThisOrder(["12", "123"]);
+shouldBeInThisOrder(["123", "13"]);
+shouldBeInThisOrder(["", " "]);
+shouldBeInThisOrder(["close", "closed"]);
+shouldBeInThisOrder(["a", "~"]);
+shouldBeInThisOrder(["_", "a"]);
+shouldBeInThisOrder(["0", "A"]);
+shouldBeInThisOrder(["-", "0"]);
+shouldBeInThisOrder([" ", "-"]);
+shouldBeInThisOrder(["A", "ABC"]);
diff --git a/test/webkit/string-substr-expected.txt b/test/webkit/string-substr-expected.txt
new file mode 100644 (file)
index 0000000..21bed3a
--- /dev/null
@@ -0,0 +1,63 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks the boundary cases of substr().
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 'bar'.substr(0) is 'bar'
+PASS 'bar'.substr(3) is ''
+PASS 'bar'.substr(4) is ''
+PASS 'bar'.substr(-1) is 'r'
+PASS 'bar'.substr(-3) is 'bar'
+PASS 'bar'.substr(-4) is 'bar'
+PASS 'bar'.substr(0, 0) is ''
+PASS 'bar'.substr(0, 1) is 'b'
+PASS 'bar'.substr(0, 3) is 'bar'
+PASS 'bar'.substr(0, 4) is 'bar'
+PASS 'bar'.substr(1, 0) is ''
+PASS 'bar'.substr(1, 1) is 'a'
+PASS 'bar'.substr(1, 2) is 'ar'
+PASS 'bar'.substr(1, 3) is 'ar'
+PASS 'bar'.substr(3, 0) is ''
+PASS 'bar'.substr(3, 1) is ''
+PASS 'bar'.substr(3, 3) is ''
+PASS 'bar'.substr(4, 0) is ''
+PASS 'bar'.substr(4, 1) is ''
+PASS 'bar'.substr(4, 3) is ''
+PASS 'bar'.substr(-1, 0) is ''
+PASS 'bar'.substr(-1, 1) is 'r'
+PASS 'bar'.substr(-3, 1) is 'b'
+PASS 'bar'.substr(-3, 3) is 'bar'
+PASS 'bar'.substr(-3, 4) is 'bar'
+PASS 'bar'.substr(-4) is 'bar'
+PASS 'bar'.substr(-4, 0) is ''
+PASS 'bar'.substr(-4, 1) is 'b'
+PASS 'bar'.substr(-4, 3) is 'bar'
+PASS 'bar'.substr(-4, 4) is 'bar'
+PASS 'GMAIL_IMP=bf-i%2Fd-0-0%2Ftl-v'.substr(10) is 'bf-i%2Fd-0-0%2Ftl-v'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/string-substr.js b/test/webkit/string-substr.js
new file mode 100644 (file)
index 0000000..c9a4274
--- /dev/null
@@ -0,0 +1,66 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks the boundary cases of substr()."
+);
+
+shouldBe("'bar'.substr(0)", "'bar'");
+shouldBe("'bar'.substr(3)", "''");
+shouldBe("'bar'.substr(4)", "''");
+shouldBe("'bar'.substr(-1)", "'r'");
+shouldBe("'bar'.substr(-3)", "'bar'");
+shouldBe("'bar'.substr(-4)", "'bar'");
+
+shouldBe("'bar'.substr(0, 0)", "''");
+shouldBe("'bar'.substr(0, 1)", "'b'");
+shouldBe("'bar'.substr(0, 3)", "'bar'");
+shouldBe("'bar'.substr(0, 4)", "'bar'");
+
+shouldBe("'bar'.substr(1, 0)", "''");
+shouldBe("'bar'.substr(1, 1)", "'a'");
+shouldBe("'bar'.substr(1, 2)", "'ar'");
+shouldBe("'bar'.substr(1, 3)", "'ar'");
+
+shouldBe("'bar'.substr(3, 0)", "''");
+shouldBe("'bar'.substr(3, 1)", "''");
+shouldBe("'bar'.substr(3, 3)", "''");
+
+shouldBe("'bar'.substr(4, 0)", "''");
+shouldBe("'bar'.substr(4, 1)", "''");
+shouldBe("'bar'.substr(4, 3)", "''");
+
+shouldBe("'bar'.substr(-1, 0)", "''");
+shouldBe("'bar'.substr(-1, 1)", "'r'");
+
+shouldBe("'bar'.substr(-3, 1)", "'b'");
+shouldBe("'bar'.substr(-3, 3)", "'bar'");
+shouldBe("'bar'.substr(-3, 4)", "'bar'");
+
+shouldBe("'bar'.substr(-4)", "'bar'");
+shouldBe("'bar'.substr(-4, 0)", "''");
+shouldBe("'bar'.substr(-4, 1)", "'b'");
+shouldBe("'bar'.substr(-4, 3)", "'bar'");
+shouldBe("'bar'.substr(-4, 4)", "'bar'");
+
+shouldBe("'GMAIL_IMP=bf-i%2Fd-0-0%2Ftl-v'.substr(10)", "'bf-i%2Fd-0-0%2Ftl-v'");
diff --git a/test/webkit/string-trim-expected.txt b/test/webkit/string-trim-expected.txt
new file mode 100644 (file)
index 0000000..9540f1c
--- /dev/null
@@ -0,0 +1,134 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks String.trim(), String.trimLeft() and String.trimRight() methods.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS whitespace[0].s.trim() is ''
+PASS whitespace[0].s.trimLeft() is ''
+PASS whitespace[0].s.trimRight() is ''
+PASS whitespace[1].s.trim() is ''
+PASS whitespace[1].s.trimLeft() is ''
+PASS whitespace[1].s.trimRight() is ''
+PASS whitespace[2].s.trim() is ''
+PASS whitespace[2].s.trimLeft() is ''
+PASS whitespace[2].s.trimRight() is ''
+PASS whitespace[3].s.trim() is ''
+PASS whitespace[3].s.trimLeft() is ''
+PASS whitespace[3].s.trimRight() is ''
+PASS whitespace[4].s.trim() is ''
+PASS whitespace[4].s.trimLeft() is ''
+PASS whitespace[4].s.trimRight() is ''
+PASS whitespace[5].s.trim() is ''
+PASS whitespace[5].s.trimLeft() is ''
+PASS whitespace[5].s.trimRight() is ''
+PASS whitespace[6].s.trim() is ''
+PASS whitespace[6].s.trimLeft() is ''
+PASS whitespace[6].s.trimRight() is ''
+PASS whitespace[7].s.trim() is ''
+PASS whitespace[7].s.trimLeft() is ''
+PASS whitespace[7].s.trimRight() is ''
+PASS whitespace[8].s.trim() is ''
+PASS whitespace[8].s.trimLeft() is ''
+PASS whitespace[8].s.trimRight() is ''
+PASS whitespace[9].s.trim() is ''
+PASS whitespace[9].s.trimLeft() is ''
+PASS whitespace[9].s.trimRight() is ''
+PASS whitespace[10].s.trim() is ''
+PASS whitespace[10].s.trimLeft() is ''
+PASS whitespace[10].s.trimRight() is ''
+PASS whitespace[11].s.trim() is ''
+PASS whitespace[11].s.trimLeft() is ''
+PASS whitespace[11].s.trimRight() is ''
+PASS whitespace[12].s.trim() is ''
+PASS whitespace[12].s.trimLeft() is ''
+PASS whitespace[12].s.trimRight() is ''
+PASS whitespace[13].s.trim() is ''
+PASS whitespace[13].s.trimLeft() is ''
+PASS whitespace[13].s.trimRight() is ''
+PASS whitespace[14].s.trim() is ''
+PASS whitespace[14].s.trimLeft() is ''
+PASS whitespace[14].s.trimRight() is ''
+PASS whitespace[15].s.trim() is ''
+PASS whitespace[15].s.trimLeft() is ''
+PASS whitespace[15].s.trimRight() is ''
+PASS whitespace[16].s.trim() is ''
+PASS whitespace[16].s.trimLeft() is ''
+PASS whitespace[16].s.trimRight() is ''
+PASS whitespace[17].s.trim() is ''
+PASS whitespace[17].s.trimLeft() is ''
+PASS whitespace[17].s.trimRight() is ''
+PASS whitespace[18].s.trim() is ''
+PASS whitespace[18].s.trimLeft() is ''
+PASS whitespace[18].s.trimRight() is ''
+PASS whitespace[19].s.trim() is ''
+PASS whitespace[19].s.trimLeft() is ''
+PASS whitespace[19].s.trimRight() is ''
+PASS whitespace[20].s.trim() is ''
+PASS whitespace[20].s.trimLeft() is ''
+PASS whitespace[20].s.trimRight() is ''
+PASS whitespace[21].s.trim() is ''
+PASS whitespace[21].s.trimLeft() is ''
+PASS whitespace[21].s.trimRight() is ''
+PASS wsString.trim() is ''
+PASS wsString.trimLeft() is ''
+PASS wsString.trimRight() is ''
+PASS trimString.trim() is testString
+PASS trimString.trimLeft() is leftTrimString
+PASS trimString.trimRight() is rightTrimString
+PASS leftTrimString.trim() is testString
+PASS leftTrimString.trimLeft() is leftTrimString
+PASS leftTrimString.trimRight() is testString
+PASS rightTrimString.trim() is testString
+PASS rightTrimString.trimLeft() is testString
+PASS rightTrimString.trimRight() is rightTrimString
+PASS trim.call(0) is '0'
+PASS trimLeft.call(0) is '0'
+PASS trimRight.call(0) is '0'
+PASS trim.call(Infinity) is 'Infinity'
+PASS trimLeft.call(Infinity) is 'Infinity'
+PASS trimRight.call(Infinity) is 'Infinity'
+PASS trim.call(NaN) is 'NaN'
+PASS trimLeft.call(NaN) is 'NaN'
+PASS trimRight.call(NaN) is 'NaN'
+PASS trim.call(true) is 'true'
+PASS trimLeft.call(true) is 'true'
+PASS trimRight.call(true) is 'true'
+PASS trim.call(false) is 'false'
+PASS trimLeft.call(false) is 'false'
+PASS trimRight.call(false) is 'false'
+PASS trim.call(({})) is '[object Object]'
+PASS trimLeft.call(({})) is '[object Object]'
+PASS trimRight.call(({})) is '[object Object]'
+PASS trim.call(({toString:function(){return 'wibble'}})) is 'wibble'
+PASS trimLeft.call(({toString:function(){return 'wibble'}})) is 'wibble'
+PASS trimRight.call(({toString:function(){return 'wibble'}})) is 'wibble'
+PASS trim.call(['an','array']) is 'an,array'
+PASS trimLeft.call(['an','array']) is 'an,array'
+PASS trimRight.call(['an','array']) is 'an,array'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/string-trim.js b/test/webkit/string-trim.js
new file mode 100644 (file)
index 0000000..e644754
--- /dev/null
@@ -0,0 +1,95 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This test checks String.trim(), String.trimLeft() and String.trimRight() methods.");
+
+//references to trim(), trimLeft() and trimRight() functions for testing Function's *.call() and *.apply() methods
+var trim            = String.prototype.trim;
+var trimLeft        = String.prototype.trimLeft;
+var trimRight       = String.prototype.trimRight;
+
+var testString      = 'foo bar';
+var trimString      = '';
+var leftTrimString  = '';
+var rightTrimString = '';
+var wsString        = '';
+
+var whitespace      = [
+    {s : '\u0009', t : 'HORIZONTAL TAB'},
+    {s : '\u000A', t : 'LINE FEED OR NEW LINE'},
+    {s : '\u000B', t : 'VERTICAL TAB'},
+    {s : '\u000C', t : 'FORMFEED'},
+    {s : '\u000D', t : 'CARRIAGE RETURN'},
+    {s : '\u0020', t : 'SPACE'},
+    {s : '\u00A0', t : 'NO-BREAK SPACE'},
+    {s : '\u2000', t : 'EN QUAD'},
+    {s : '\u2001', t : 'EM QUAD'},
+    {s : '\u2002', t : 'EN SPACE'},
+    {s : '\u2003', t : 'EM SPACE'},
+    {s : '\u2004', t : 'THREE-PER-EM SPACE'},
+    {s : '\u2005', t : 'FOUR-PER-EM SPACE'},
+    {s : '\u2006', t : 'SIX-PER-EM SPACE'},
+    {s : '\u2007', t : 'FIGURE SPACE'},
+    {s : '\u2008', t : 'PUNCTUATION SPACE'},
+    {s : '\u2009', t : 'THIN SPACE'},
+    {s : '\u200A', t : 'HAIR SPACE'},
+    {s : '\u3000', t : 'IDEOGRAPHIC SPACE'},
+    {s : '\u2028', t : 'LINE SEPARATOR'},
+    {s : '\u2029', t : 'PARAGRAPH SEPARATOR'},
+    {s : '\u200B', t : 'ZERO WIDTH SPACE (category Cf)'}
+];
+
+for (var i = 0; i < whitespace.length; i++) {
+    shouldBe("whitespace["+i+"].s.trim()", "''");
+    shouldBe("whitespace["+i+"].s.trimLeft()", "''");
+    shouldBe("whitespace["+i+"].s.trimRight()", "''");
+    wsString += whitespace[i].s;
+}
+
+trimString      = wsString   + testString + wsString;
+leftTrimString  = testString + wsString;   //trimmed from the left
+rightTrimString = wsString   + testString; //trimmed from the right
+
+shouldBe("wsString.trim()",      "''");
+shouldBe("wsString.trimLeft()",  "''");
+shouldBe("wsString.trimRight()", "''");
+
+shouldBe("trimString.trim()",      "testString");
+shouldBe("trimString.trimLeft()",  "leftTrimString");
+shouldBe("trimString.trimRight()", "rightTrimString");
+
+shouldBe("leftTrimString.trim()",      "testString");
+shouldBe("leftTrimString.trimLeft()",  "leftTrimString");
+shouldBe("leftTrimString.trimRight()", "testString");
+
+shouldBe("rightTrimString.trim()",      "testString");
+shouldBe("rightTrimString.trimLeft()",  "testString");
+shouldBe("rightTrimString.trimRight()", "rightTrimString");
+
+var testValues = ["0", "Infinity", "NaN", "true", "false", "({})", "({toString:function(){return 'wibble'}})", "['an','array']"];
+for (var i = 0; i < testValues.length; i++) {
+    shouldBe("trim.call("+testValues[i]+")", "'"+eval(testValues[i])+"'");
+    shouldBe("trimLeft.call("+testValues[i]+")", "'"+eval(testValues[i])+"'");
+    shouldBe("trimRight.call("+testValues[i]+")", "'"+eval(testValues[i])+"'");
+}
+
diff --git a/test/webkit/string_replace-expected.txt b/test/webkit/string_replace-expected.txt
new file mode 100644 (file)
index 0000000..1293993
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This will test string.replace with {n, m} regexp patterns.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "YY".replace(/Y{1,4}/g,"YYYY") is "YYYY"
+PASS "MM".replace(/M{1,2}/g,"M") is "M"
+PASS "YY".replace(/Y{1,4}/g,"MMMM") is "MMMM"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/string_replace.js b/test/webkit/string_replace.js
new file mode 100644 (file)
index 0000000..be11835
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This will test string.replace with {n, m} regexp patterns."
+);
+
+shouldBe('"YY".replace(/Y{1,4}/g,"YYYY")', '"YYYY"');
+shouldBe('"MM".replace(/M{1,2}/g,"M")', '"M"');
+shouldBe('"YY".replace(/Y{1,4}/g,"MMMM")', '"MMMM"');
diff --git a/test/webkit/this-non-object-proto-expected.txt b/test/webkit/this-non-object-proto-expected.txt
new file mode 100644 (file)
index 0000000..0c26471
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that setting a non-object, non-null value for this.__proto__ does not lead to a crash when setting a property on the this object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS this.__proto__ is originalProto
+If we got to this point then we did not crash and the test has passed.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/this-non-object-proto.js b/test/webkit/this-non-object-proto.js
new file mode 100644 (file)
index 0000000..115b203
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test checks that setting a non-object, non-null value for this.__proto__ does not lead to a crash when setting a property on the this object.'
+);
+
+originalProto = this.__proto__;
+this.__proto__ = 1;
+
+shouldBe("this.__proto__", "originalProto");
+
+someProperty = 1;
+debug('If we got to this point then we did not crash and the test has passed.');
diff --git a/test/webkit/throw-from-finally-expected.txt b/test/webkit/throw-from-finally-expected.txt
new file mode 100644 (file)
index 0000000..71b5877
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that throwing from a finally block has the expected effect.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "" + events is "1:try,1:finally,2:finally,2:thingy,3:thingy,3:finally,4:thingy,4:finally,4:another thingy,5:hi,5:wat"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/throw-from-finally.js b/test/webkit/throw-from-finally.js
new file mode 100644 (file)
index 0000000..baa4ae8
--- /dev/null
@@ -0,0 +1,81 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This tests that throwing from a finally block has the expected effect."
+);
+
+var events = [];
+
+try {
+    events.push("1:try");
+} finally {
+    events.push("1:finally");
+}
+
+try {
+    try {
+        throw "2:thingy";
+    } finally {
+        events.push("2:finally");
+    }
+} catch (e) {
+    events.push(e);
+}
+
+try {
+    throw "3:thingy";
+} catch (e) {
+    events.push(e);
+} finally {
+    events.push("3:finally");
+}
+
+try {
+    try {
+        throw "4:thingy";
+    } catch (e) {
+        events.push(e);
+    } finally {
+        events.push("4:finally");
+        throw "4:another thingy";
+    }
+} catch (e) {
+    events.push(e);
+}
+
+try {
+    for (;;) {
+        try {
+            continue;
+        } finally {
+            events.push("5:hi");
+            throw "5:wat";
+        }
+    }
+} catch (e) {
+    events.push(e);
+}
+
+shouldBe("\"\" + events", "\"1:try,1:finally,2:finally,2:thingy,3:thingy,3:finally,4:thingy,4:finally,4:another thingy,5:hi,5:wat\"");
+
diff --git a/test/webkit/toString-elision-trailing-comma-expected.txt b/test/webkit/toString-elision-trailing-comma-expected.txt
new file mode 100644 (file)
index 0000000..c4b088f
--- /dev/null
@@ -0,0 +1,113 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that toString() round-trip on a function that has a array with elision does not remove a comma.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS typeof undefined is 'undefined'
+PASS f1().length is 1
+PASS f1()[1-1] is undefined
+PASS unevalf(eval(unevalf(f1))) is unevalf(f1)
+PASS eval(unevalf(f1))().length is 1
+PASS eval(unevalf(f1))()[1-1] is undefined
+PASS f2().length is 1
+PASS f2()[1-1] is 1
+PASS unevalf(eval(unevalf(f2))) is unevalf(f2)
+PASS eval(unevalf(f2))().length is 1
+PASS eval(unevalf(f2))()[1-1] is 1
+PASS f3().length is 1
+PASS f3()[1-1] is 1
+PASS unevalf(eval(unevalf(f3))) is unevalf(f3)
+PASS eval(unevalf(f3))().length is 1
+PASS eval(unevalf(f3))()[1-1] is 1
+PASS f4().length is 2
+PASS f4()[2-1] is undefined
+PASS unevalf(eval(unevalf(f4))) is unevalf(f4)
+PASS eval(unevalf(f4))().length is 2
+PASS eval(unevalf(f4))()[2-1] is undefined
+PASS f5().length is 3
+PASS f5()[3-1] is undefined
+PASS unevalf(eval(unevalf(f5))) is unevalf(f5)
+PASS eval(unevalf(f5))().length is 3
+PASS eval(unevalf(f5))()[3-1] is undefined
+PASS f6().length is 4
+PASS f6()[4-1] is 4
+PASS unevalf(eval(unevalf(f6))) is unevalf(f6)
+PASS eval(unevalf(f6))().length is 4
+PASS eval(unevalf(f6))()[4-1] is 4
+PASS f7().length is 2
+PASS f7()[2-1] is 2
+PASS unevalf(eval(unevalf(f7))) is unevalf(f7)
+PASS eval(unevalf(f7))().length is 2
+PASS eval(unevalf(f7))()[2-1] is 2
+PASS f8().length is 3
+PASS f8()[3-1] is undefined
+PASS unevalf(eval(unevalf(f8))) is unevalf(f8)
+PASS eval(unevalf(f8))().length is 3
+PASS eval(unevalf(f8))()[3-1] is undefined
+PASS f9().length is 5
+PASS f9()[5-1] is 5
+PASS unevalf(eval(unevalf(f9))) is unevalf(f9)
+PASS eval(unevalf(f9))().length is 5
+PASS eval(unevalf(f9))()[5-1] is 5
+PASS f10().length is 5
+PASS f10()[5-1] is undefined
+PASS unevalf(eval(unevalf(f10))) is unevalf(f10)
+PASS eval(unevalf(f10))().length is 5
+PASS eval(unevalf(f10))()[5-1] is undefined
+PASS f11().length is 6
+PASS f11()[6-1] is 6
+PASS unevalf(eval(unevalf(f11))) is unevalf(f11)
+PASS eval(unevalf(f11))().length is 6
+PASS eval(unevalf(f11))()[6-1] is 6
+PASS f12().length is 2
+PASS f12()[2-1] is undefined
+PASS unevalf(eval(unevalf(f12))) is unevalf(f12)
+PASS eval(unevalf(f12))().length is 2
+PASS eval(unevalf(f12))()[2-1] is undefined
+PASS f13().length is 2
+PASS f13()[2-1] is undefined
+PASS unevalf(eval(unevalf(f13))) is unevalf(f13)
+PASS eval(unevalf(f13))().length is 2
+PASS eval(unevalf(f13))()[2-1] is undefined
+PASS f14().length is 3
+PASS f14()[3-1] is undefined
+PASS unevalf(eval(unevalf(f14))) is unevalf(f14)
+PASS eval(unevalf(f14))().length is 3
+PASS eval(unevalf(f14))()[3-1] is undefined
+PASS f15().length is 2
+PASS f15()[2-1] is undefined
+PASS unevalf(eval(unevalf(f15))) is unevalf(f15)
+PASS eval(unevalf(f15))().length is 2
+PASS eval(unevalf(f15))()[2-1] is undefined
+PASS f16().length is 3
+PASS f16()[3-1] is undefined
+PASS unevalf(eval(unevalf(f16))) is unevalf(f16)
+PASS eval(unevalf(f16))().length is 3
+PASS eval(unevalf(f16))()[3-1] is undefined
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/toString-elision-trailing-comma.js b/test/webkit/toString-elision-trailing-comma.js
new file mode 100644 (file)
index 0000000..d649905
--- /dev/null
@@ -0,0 +1,131 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that toString() round-trip on a function that has a array with elision does not remove a comma."
+);
+
+function f1() {
+    return [,];
+}
+
+function f2() {
+    return [1];
+}
+
+function f3() {
+    return [1,];
+}
+
+// this is the first testcase that proves that trailing
+// elision comma is not removed
+function f4() {
+    return [1,,];
+}
+
+function f5() {
+    return [1,,,];
+}
+function f6() {
+    return [1,,,4];
+}
+
+function f7() {
+    return [,2,];
+}
+
+function f8() {
+    return [,2,,];
+}
+
+function f9() {
+    return [,2,,,5];
+}
+
+function f10() {
+    return [,,3,,,];
+}
+
+function f11() {
+    return [,,3,,,6];
+}
+
+function f12() {
+    return [,undefined];
+}
+
+function f13() {
+    return [,undefined,];
+}
+
+function f14() {
+    return [,undefined,,];
+}
+
+function f15() {
+    return [,,];
+}
+
+function f16() {
+    return [,,,];
+}
+
+shouldBe("typeof undefined", "'undefined'");
+
+unevalf = function(x) { return '(' + x.toString() + ')'; };
+
+function testToStringAndLength(fn, length, lastElement)
+{
+    // check that array length is correct
+    shouldBe(""+ fn +"().length", "" + length);
+
+    // check that last element is what it is supposed to be
+    shouldBe(""+ fn +"()[" + length +"-1]", "" + lastElement);
+
+    // check that toString result evaluates to code that can be evaluated
+    // and that toString doesn't remove the trailing elision comma.
+    shouldBe("unevalf(eval(unevalf("+fn+")))", "unevalf(" + fn + ")");
+
+    // check that toString()ed functions should retain semantics
+
+    shouldBe("eval(unevalf("+fn+"))().length", ""+length);
+    shouldBe("eval(unevalf("+fn+"))()[" + length +"-1]", ""+lastElement);
+}
+
+
+testToStringAndLength("f1", 1);
+testToStringAndLength("f2", 1, 1);
+testToStringAndLength("f3", 1,1);
+testToStringAndLength("f4", 2);
+testToStringAndLength("f5", 3);
+testToStringAndLength("f6", 4, 4);
+testToStringAndLength("f7", 2, 2);
+testToStringAndLength("f8", 3);
+testToStringAndLength("f9", 5, 5);
+testToStringAndLength("f10", 5);
+testToStringAndLength("f11", 6, 6);
+testToStringAndLength("f12", 2);
+testToStringAndLength("f13", 2);
+testToStringAndLength("f14", 3);
+testToStringAndLength("f15", 2);
+testToStringAndLength("f16", 3);
diff --git a/test/webkit/toString-for-var-decl-expected.txt b/test/webkit/toString-for-var-decl-expected.txt
new file mode 100644 (file)
index 0000000..e1d7428
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for a couple of specific ways that bugs in toString() round trips have changed the meanings of functions with var declarations inside for loops.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS unevalf(eval(unevalf(f1))) is unevalf(f1)
+PASS unevalf(eval(unevalf(f2))) is unevalf(f2)
+PASS unevalf(eval(unevalf(f3))) is unevalf(f3)
+PASS unevalf(eval(unevalf(f4))) is unevalf(f4)
+PASS unevalf(f2) != unevalf(f3) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/toString-for-var-decl.js b/test/webkit/toString-for-var-decl.js
new file mode 100644 (file)
index 0000000..2b4db73
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks for a couple of specific ways that bugs in toString() round trips have changed the meanings of functions with var declarations inside for loops."
+);
+
+function f1() { for (var j = 1 in []) {}  }
+var f2 = function () { for (var j = 1; j < 10; ++j) {}  }
+var f3 = function () { for (j = 1;j < 10; ++j) {}  }
+var f4 = function () { for (var j;;) {}  }
+
+var unevalf = function(x) { return '(' + x.toString() + ')'; }
+
+shouldBe("unevalf(eval(unevalf(f1)))", "unevalf(f1)");
+shouldBe("unevalf(eval(unevalf(f2)))", "unevalf(f2)");
+shouldBe("unevalf(eval(unevalf(f3)))", "unevalf(f3)");
+shouldBe("unevalf(eval(unevalf(f4)))", "unevalf(f4)");
+shouldBe("unevalf(f2) != unevalf(f3)", "true");
diff --git a/test/webkit/toString-number-dot-expr-expected.txt b/test/webkit/toString-number-dot-expr-expected.txt
new file mode 100644 (file)
index 0000000..67dbd21
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that toString() round-trip on a function that has a expression of form 4..x does not lose its meaning. The expression accesses the property 'x' from number '4'.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS unevalf(eval(unevalf(f1))) is unevalf(f1)
+PASS unevalf(eval(unevalf(f2))) is unevalf(f2)
+PASS unevalf(eval(unevalf(f3))) is unevalf(f3)
+PASS unevalf(eval(unevalf(f4))) is unevalf(f4)
+PASS unevalf(eval(unevalf(f5))) is unevalf(f5)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/toString-number-dot-expr.js b/test/webkit/toString-number-dot-expr.js
new file mode 100644 (file)
index 0000000..ebfc8bd
--- /dev/null
@@ -0,0 +1,214 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that toString() round-trip on a function that has a expression of form 4..x does not lose its meaning."
++ " The expression accesses the property 'x' from number '4'."
+);
+
+// construct same test-case for different kinds of number literals. the switch is used to avoid
+// individual returns getting optimized away (if the interpreter would do dead code elimination)
+
+// testcase for number literal with decimal point, i.e '4.'
+function f1(a) {
+    switch(a) {
+    case "member":
+        return 4..x;
+    case "arrayget":
+        return 4.["x"];
+    case "constr":
+        return 4.();
+    case "funccall":
+        return 4..f();
+    case "parenfunccall":
+        return (4..x)();
+    case "assignment":
+        return 4..x = 33;
+    case "assignment2":
+        return 4..x >>>= 1;
+    case "prefix":
+        return ++4..x;
+    case "postfix":
+        return 4..x++;
+   case "delete":
+        delete 4..x;
+        return 4..x;
+    }
+
+    return 0;
+}
+
+// '4. .'
+function f2(a) {
+    switch(a) {
+    case "member":
+        return 4. .x;
+    case "arrayget":
+        return 4. ["x"];
+    case "constr":
+        return 4.();
+    case "funccall":
+        return 4. .f();
+    case "parenfunccall":
+        return (4. .x)();
+    case "assignment":
+        return 4. .x = 33;
+    case "assignment2":
+        return 4. .x >>>= 1;
+    case "prefix":
+        return ++4. .x;
+    case "postfix":
+        return 4. .x++;
+    case "delete":
+        delete 4. .x;
+        return 4. .x;
+    }
+
+    return 0;
+}
+
+// '4e20'
+function f2(a) {
+    switch(a) {
+    case "member":
+        return 4e20.x;
+    case "arrayget":
+        return 4e20["x"];
+    case "constr":
+        return 4e20();
+    case "funccall":
+        return 4e20.f();
+    case "parenfunccall":
+        return (4e20.x)();
+    case "assignment":
+        return 4e20.x = 33;
+    case "assignment2":
+        return 4e20.x >>>= 1;
+    case "prefix":
+        return ++4e20.x;
+    case "postfix":
+        return 4e20.x++;
+    case "delete":
+        delete 4e20.x;
+        return 4e20.x;
+    }
+
+    return 0;
+}
+
+// '4.1e-20'
+function f3(a) {
+    switch(a) {
+    case "member":
+        return 4.1e-20.x;
+    case "arrayget":
+        return 4.1e-20["x"];
+    case "constr":
+        return 4.1e-20();
+    case "funccall":
+        return 4.1e-20.f();
+    case "parenfunccall":
+        return (4.1e-20.x)();
+    case "assignment":
+        return 4.1e-20.x = 33;
+    case "assignment2":
+        return 4.1e-20.x >>>= 1;
+    case "prefix":
+        return ++4.1e-20.x;
+    case "postfix":
+        return 4.1e-20.x++;
+   case "delete":
+        delete 4.1e-20.x;
+        return 4.1e-20.x;
+    }
+
+    return 0;
+}
+
+// '4'
+function f4(a) {
+    switch(a) {
+    case "member":
+        return 4 .x;
+    case "arrayget":
+        return 4["x"];
+    case "constr":
+        return 4();
+    case "funccall":
+        return 4 .f();
+    case "parenfunccall":
+        return (4 .x)();
+    case "assignment":
+        return 4 .x = 33;
+    case "assignment2":
+        return 4 .x >>>= 1;
+    case "prefix":
+        return ++4 .x;
+    case "postfix":
+        return 4 .x++;
+    case "delete":
+        delete 4 .x;
+        return 4 .x;
+
+    }
+
+    return 0;
+}
+
+// '(4)'
+function f5(a) {
+    switch(a) {
+    case "member":
+        return (4).x;
+    case "arrayget":
+        return (4)["x"];
+    case "constr":
+        return (4)();
+    case "funccall":
+        return (4).f();
+    case "parenfunccall":
+        return ((4).x)();
+    case "assignment":
+        return (4).x = 33;
+    case "assignment2":
+        return (4).x >>>= 1;
+    case "prefix":
+        return ++(4).x;
+    case "postfix":
+        return (4).x++;
+    case "delete":
+        delete (4).x;
+        return (4).x;
+    }
+
+    return 0;
+}
+unevalf = function(x) { return '(' + x.toString() + ')'; };
+
+function testToString(fn)
+{
+    shouldBe("unevalf(eval(unevalf(" + fn + ")))", "unevalf(" + fn + ")");
+}
+
+for(var i = 1; i < 6; ++i)
+    testToString("f" + i);
diff --git a/test/webkit/toString-prefix-postfix-preserve-parens-expected.txt b/test/webkit/toString-prefix-postfix-preserve-parens-expected.txt
new file mode 100644 (file)
index 0000000..e4841b2
--- /dev/null
@@ -0,0 +1,84 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that toString() round-trip on a function that has prefix, postfix and typeof operators applied to group expression will not remove the grouping. Also checks that evaluation of such a expression produces run-time exception
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS unevalf(eval(unevalf(prefix_should_preserve_parens))) is unevalf(prefix_should_preserve_parens)
+PASS /.*\(+x\)*, y\)/.test(unevalf(prefix_should_preserve_parens)) is true
+PASS prefix_should_preserve_parens(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS eval(unevalf(prefix_should_preserve_parens))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS unevalf(eval(unevalf(postfix_should_preserve_parens))) is unevalf(postfix_should_preserve_parens)
+PASS /.*\(+x\)*, y\)/.test(unevalf(postfix_should_preserve_parens)) is true
+PASS postfix_should_preserve_parens(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+PASS eval(unevalf(postfix_should_preserve_parens))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+PASS unevalf(eval(unevalf(both_should_preserve_parens))) is unevalf(both_should_preserve_parens)
+PASS /.*\(+x\)*, y\)/.test(unevalf(both_should_preserve_parens)) is true
+PASS both_should_preserve_parens(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS eval(unevalf(both_should_preserve_parens))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS unevalf(eval(unevalf(prefix_should_preserve_parens_multi))) is unevalf(prefix_should_preserve_parens_multi)
+PASS /.*\(+x\)*, y\)/.test(unevalf(prefix_should_preserve_parens_multi)) is true
+PASS prefix_should_preserve_parens_multi(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS eval(unevalf(prefix_should_preserve_parens_multi))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS unevalf(eval(unevalf(postfix_should_preserve_parens_multi))) is unevalf(postfix_should_preserve_parens_multi)
+PASS /.*\(+x\)*, y\)/.test(unevalf(postfix_should_preserve_parens_multi)) is true
+PASS postfix_should_preserve_parens_multi(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+PASS eval(unevalf(postfix_should_preserve_parens_multi))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+PASS unevalf(eval(unevalf(prefix_should_preserve_parens_multi1))) is unevalf(prefix_should_preserve_parens_multi1)
+PASS /.*\(+x\)*, y\)/.test(unevalf(prefix_should_preserve_parens_multi1)) is true
+PASS prefix_should_preserve_parens_multi1(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS eval(unevalf(prefix_should_preserve_parens_multi1))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS unevalf(eval(unevalf(postfix_should_preserve_parens_multi1))) is unevalf(postfix_should_preserve_parens_multi1)
+PASS /.*\(+x\)*, y\)/.test(unevalf(postfix_should_preserve_parens_multi1)) is true
+PASS postfix_should_preserve_parens_multi1(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+PASS eval(unevalf(postfix_should_preserve_parens_multi1))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+PASS unevalf(eval(unevalf(prefix_should_preserve_parens_multi2))) is unevalf(prefix_should_preserve_parens_multi2)
+PASS /.*\(+x\)*, y\)/.test(unevalf(prefix_should_preserve_parens_multi2)) is true
+PASS prefix_should_preserve_parens_multi2(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS eval(unevalf(prefix_should_preserve_parens_multi2))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+PASS unevalf(eval(unevalf(postfix_should_preserve_parens_multi2))) is unevalf(postfix_should_preserve_parens_multi2)
+PASS /.*\(+x\)*, y\)/.test(unevalf(postfix_should_preserve_parens_multi2)) is true
+PASS postfix_should_preserve_parens_multi2(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+PASS eval(unevalf(postfix_should_preserve_parens_multi2))(1, 2, 3); threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+PASS unevalf(eval(unevalf(typeof_should_preserve_parens))) is unevalf(typeof_should_preserve_parens)
+PASS /.*\(+x\)*, y\)/.test(unevalf(typeof_should_preserve_parens)) is true
+PASS typeof_should_preserve_parens('a', 1); is 'number'
+PASS eval(unevalf(typeof_should_preserve_parens))('a', 1); is 'number'
+PASS unevalf(eval(unevalf(typeof_should_preserve_parens1))) is unevalf(typeof_should_preserve_parens1)
+PASS /.*\(+x\)*, y\)/.test(unevalf(typeof_should_preserve_parens1)) is true
+PASS typeof_should_preserve_parens1('a', 1); is 'number'
+PASS eval(unevalf(typeof_should_preserve_parens1))('a', 1); is 'number'
+PASS unevalf(eval(unevalf(typeof_should_preserve_parens2))) is unevalf(typeof_should_preserve_parens2)
+PASS /.*\(+x\)*, y\)/.test(unevalf(typeof_should_preserve_parens2)) is true
+PASS typeof_should_preserve_parens2('a', 1); is 'number'
+PASS eval(unevalf(typeof_should_preserve_parens2))('a', 1); is 'number'
+PASS unevalf(eval(unevalf(typeof_should_preserve_parens_multi))) is unevalf(typeof_should_preserve_parens_multi)
+PASS /.*\(+x\)*, y\)/.test(unevalf(typeof_should_preserve_parens_multi)) is true
+PASS typeof_should_preserve_parens_multi('a', 1); is 'number'
+PASS eval(unevalf(typeof_should_preserve_parens_multi))('a', 1); is 'number'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/toString-prefix-postfix-preserve-parens.js b/test/webkit/toString-prefix-postfix-preserve-parens.js
new file mode 100644 (file)
index 0000000..192f278
--- /dev/null
@@ -0,0 +1,154 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that toString() round-trip on a function that has prefix, postfix and typeof operators applied to group expression will not remove the grouping. Also checks that evaluation of such a expression produces run-time exception"
+);
+
+function postfix_should_preserve_parens(x, y, z) {
+    (x, y)++;
+    return y;
+}
+
+function prefix_should_preserve_parens(x, y, z) {
+    ++(x, y);
+    return x;
+
+}
+
+function both_should_preserve_parens(x, y, z) {
+    ++(x, y)--;
+    return x;
+
+}
+
+function postfix_should_preserve_parens_multi(x, y, z) {
+    (((x, y)))--;
+    return x;
+}
+
+function prefix_should_preserve_parens_multi(x, y, z) {
+    --(((x, y)));
+    return x;
+}
+
+function both_should_preserve_parens_multi(x, y, z) {
+    ++(((x, y)))--;
+    return x;
+}
+
+function postfix_should_preserve_parens_multi1(x, y, z) {
+    (((x)), y)--;
+    return x;
+}
+
+function prefix_should_preserve_parens_multi1(x, y, z) {
+    --(((x)), y);
+    return x;
+}
+
+function prefix_should_preserve_parens_multi2(x, y, z) {
+    var z = 0;
+    --(((x), y), z);
+    return x;
+}
+
+function postfix_should_preserve_parens_multi2(x, y, z) {
+    var z = 0;
+    (((x), y) ,z)++;
+    return x;
+}
+
+// if these return a variable (such as y) instead of
+// the result of typeof, this means that the parenthesis
+// got lost somewhere.
+function typeof_should_preserve_parens(x, y, z) {
+    return typeof (x, y);
+}
+
+function typeof_should_preserve_parens1(x, y, z) {
+    return typeof ((x, y));
+}
+
+function typeof_should_preserve_parens2(x, y, z) {
+    var z = 33;
+    return typeof (z, (x, y));
+}
+
+function typeof_should_preserve_parens_multi(x, y, z) {
+    var z = 33;
+    return typeof ((z,(((x, y)))));
+}
+
+unevalf = function(x) { return '(' + x.toString() + ')'; };
+
+function testToString(fn) {
+    // check that toString result evaluates to code that can be evaluated
+    // this doesn't actually reveal the bug that this test is testing
+    shouldBe("unevalf(eval(unevalf("+fn+")))", "unevalf(" + fn + ")");
+
+    // check that grouping operator is still there (this test reveals the bug
+    // but will create possible false negative if toString output changes in
+    // the future)
+    shouldBeTrue("/.*\\(+x\\)*, y\\)/.test(unevalf("+fn+"))");
+
+}
+
+function testToStringAndRTFailure(fn)
+{
+    testToString(fn);
+
+    // check that function call produces run-time exception
+    shouldThrow(""+fn+ "(1, 2, 3);");
+
+    // check that function call produces run-time exception after eval(unevalf)
+    shouldThrow("eval(unevalf("+fn+ "))(1, 2, 3);");
+}
+
+function testToStringAndReturn(fn, p1, p2, retval)
+{
+
+    testToString(fn);
+
+    // check that function call produces correct result
+    shouldBe("" + fn + "(" + p1 + ", " + p2 +");", retval);
+
+    // check that function call produces correct result after eval(unevalf)
+    shouldBe("eval(unevalf("+fn+ "))" + "(" + p1 + ", " + p2 +");", retval);
+}
+
+
+testToStringAndRTFailure("prefix_should_preserve_parens");
+testToStringAndRTFailure("postfix_should_preserve_parens");
+testToStringAndRTFailure("both_should_preserve_parens");
+testToStringAndRTFailure("prefix_should_preserve_parens_multi");
+testToStringAndRTFailure("postfix_should_preserve_parens_multi");
+testToStringAndRTFailure("prefix_should_preserve_parens_multi1");
+testToStringAndRTFailure("postfix_should_preserve_parens_multi1");
+testToStringAndRTFailure("prefix_should_preserve_parens_multi2");
+testToStringAndRTFailure("postfix_should_preserve_parens_multi2");
+
+testToStringAndReturn("typeof_should_preserve_parens", "'a'", 1, "'number'");
+testToStringAndReturn("typeof_should_preserve_parens1", "'a'", 1, "'number'");
+testToStringAndReturn("typeof_should_preserve_parens2", "'a'", 1, "'number'");
+testToStringAndReturn("typeof_should_preserve_parens_multi", "'a'", 1, "'number'");
diff --git a/test/webkit/toString-recursion-expected.txt b/test/webkit/toString-recursion-expected.txt
new file mode 100644 (file)
index 0000000..a7ccb8f
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that toString() does not have a problem when an object has itself as a property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS var array = []; array[0] = array; array + '' is ''
+PASS var error = new Error; error.name = error; error.message = error; error + '' is ''
+PASS var regexp = /a/; regexp.source = regexp; regexp + '' is '/a/'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/toString-recursion.js b/test/webkit/toString-recursion.js
new file mode 100644 (file)
index 0000000..51e9f98
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that toString() does not have a problem when an object has itself as a property."
+);
+
+// Array (elements)
+shouldBe("var array = []; array[0] = array; array + ''", "''");
+
+// Error (name, message)
+shouldBe("var error = new Error; error.name = error; error.message = error; error + ''", "''");
+
+// RegExp (source)
+shouldBe("var regexp = /a/; regexp.source = regexp; regexp + ''", "'/a/'");
diff --git a/test/webkit/tostring-exception-in-property-access-expected.txt b/test/webkit/tostring-exception-in-property-access-expected.txt
new file mode 100644 (file)
index 0000000..12bb751
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests that the various subscript operators handle subscript string conversion exceptions correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS PASS: Exception caught -- Exception thrown by toString
+PASS target[""] is 'Did not assign to property when setter subscript threw'
+PASS PASS: Exception caught -- Exception thrown by toString
+PASS target[""] is 'Did not delete property when subscript threw'
+PASS PASS: Exception caught -- Exception thrown by toString
+PASS localTest is 'Did not assign to result when subscript threw.'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/tostring-exception-in-property-access.js b/test/webkit/tostring-exception-in-property-access.js
new file mode 100644 (file)
index 0000000..2274255
--- /dev/null
@@ -0,0 +1,56 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This tests that the various subscript operators handle subscript string conversion exceptions correctly.");
+
+var toStringThrower = { toString: function() { throw "Exception thrown by toString"; }};
+var target = {"" : "Did not assign to property when setter subscript threw"};
+
+try {
+    target[toStringThrower] = "Assigned to property on object when subscript threw";
+} catch(e) {
+    testPassed("PASS: Exception caught -- " + e);
+}
+shouldBe('target[""]', "'Did not assign to property when setter subscript threw'");
+
+target[""] = "Did not delete property when subscript threw";
+try {
+    delete target[toStringThrower];
+} catch(e) {
+    testPassed("PASS: Exception caught -- " + e);
+}
+shouldBe('target[""]', "'Did not delete property when subscript threw'");
+
+delete target[""];
+
+target.__defineGetter__("", function(){
+                                testFailed('FAIL: Loaded property from object when subscript threw.');
+                                return "FAIL: Assigned to result when subscript threw.";
+                            });
+var localTest = "Did not assign to result when subscript threw.";
+try {
+    localTest = target[toStringThrower];
+} catch(e) {
+    testPassed("PASS: Exception caught -- " + e);
+}
+shouldBe('localTest', "'Did not assign to result when subscript threw.'");
diff --git a/test/webkit/try-catch-try-try-catch-try-finally-return-catch-finally-expected.txt b/test/webkit/try-catch-try-try-catch-try-finally-return-catch-finally-expected.txt
new file mode 100644 (file)
index 0000000..c74dc53
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what would happen if you a throwing operation at the beginning of a finally blow that gets inlined inside a complicated catch/finally stack. The correct outcome is for this test to not crash during exception throwing.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS It worked.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/try-catch-try-try-catch-try-finally-return-catch-finally.js b/test/webkit/try-catch-try-try-catch-try-finally-return-catch-finally.js
new file mode 100644 (file)
index 0000000..140ba7f
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what would happen if you a throwing operation at the beginning of a finally blow that gets inlined inside a complicated catch/finally stack. The correct outcome is for this test to not crash during exception throwing."
+);
+
+function foo() {
+    try{
+        N
+    } catch(x) {
+        try {
+            try {
+                w
+            } catch(x) {
+                try {
+                } finally {
+                    return
+                }
+            }
+        } catch (a) {
+        }
+    } finally {
+        z
+    }
+}
+
+try {
+    foo();
+} catch (e) {
+    testPassed("It worked.");
+}
+
diff --git a/test/webkit/try-try-return-finally-finally-expected.txt b/test/webkit/try-try-return-finally-finally-expected.txt
new file mode 100644 (file)
index 0000000..e41618a
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests what would happen if you have nested try-finally's with interesting control statements nested within them. The correct outcome is for this test to not crash during bytecompilation.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS It worked.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/try-try-return-finally-finally.js b/test/webkit/try-try-return-finally-finally.js
new file mode 100644 (file)
index 0000000..8eef642
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests what would happen if you have nested try-finally's with interesting control statements nested within them. The correct outcome is for this test to not crash during bytecompilation."
+);
+
+function foo() {
+    try{
+        while(a){
+            try{
+                if(b){return}
+            }finally{
+                c();
+            }
+            if(d){return}
+        }
+    }finally{
+        e();
+    }
+}
+
+try {
+    foo();
+} catch (e) {
+    testPassed("It worked.");
+}
+
diff --git a/test/webkit/typeof-codegen-crash-expected.txt b/test/webkit/typeof-codegen-crash-expected.txt
new file mode 100644 (file)
index 0000000..05f8a15
--- /dev/null
@@ -0,0 +1,39 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test for a crash when optimizing expressions of the form 'typeof o == constant' where 'constant' is not a string.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS typeof o == undefined is false
+PASS typeof o == null is false
+PASS typeof o == true is false
+PASS typeof o == false is false
+PASS typeof o == 1 is false
+PASS typeof o == 1.0 is false
+PASS typeof o == { } is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/typeof-codegen-crash.js b/test/webkit/typeof-codegen-crash.js
new file mode 100644 (file)
index 0000000..a8ea5e0
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test for a crash when optimizing expressions of the form 'typeof o == constant' where 'constant' is not a string."
+);
+
+var o = { };
+
+shouldBeFalse("typeof o == undefined");
+shouldBeFalse("typeof o == null");
+shouldBeFalse("typeof o == true");
+shouldBeFalse("typeof o == false");
+shouldBeFalse("typeof o == 1");
+shouldBeFalse("typeof o == 1.0");
+shouldBeFalse("typeof o == { }");
diff --git a/test/webkit/typeof-constant-string-expected.txt b/test/webkit/typeof-constant-string-expected.txt
new file mode 100644 (file)
index 0000000..274e197
--- /dev/null
@@ -0,0 +1,70 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that using the typeof operator on a JavaScript value and comparing it to a constant string works as expected.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS isUndefined(undefined) is true
+PASS isUndefined(1) is false
+PASS isUndefinedStrict(undefined) is true
+PASS isUndefinedStrict(1) is false
+PASS isBoolean(true) is true
+PASS isBoolean(false) is true
+PASS isBoolean(1) is false
+PASS isBooleanStrict(true) is true
+PASS isBooleanStrict(false) is true
+PASS isBooleanStrict(1) is false
+PASS isNumber(1) is true
+PASS isNumber(undefined) is false
+PASS isNumberStrict(1) is true
+PASS isNumberStrict(undefined) is false
+PASS isString('string') is true
+PASS isString(1) is false
+PASS isStringStrict('string') is true
+PASS isStringStrict(1) is false
+PASS isObject({ }) is true
+PASS isObject(1) is false
+PASS isObjectStrict({ }) is true
+PASS isObjectStrict(1) is false
+PASS isFunction(function () { }) is true
+PASS isFunction(1) is false
+PASS isFunctionStrict(function () { }) is true
+PASS isFunctionStrict(1) is false
+PASS complexIsUndefinedTest() is 'PASS'
+PASS complexIsBooleanTest() is 'PASS'
+PASS complexIsNumberTest() is 'PASS'
+PASS complexIsStringTest() is 'PASS'
+PASS complexIsObjectTest() is 'PASS'
+PASS complexIsFunctionTest() is 'PASS'
+PASS complexIsUndefinedStrictTest() is 'PASS'
+PASS complexIsBooleanStrictTest() is 'PASS'
+PASS complexIsNumberStrictTest() is 'PASS'
+PASS complexIsStringStrictTest() is 'PASS'
+PASS complexIsObjectStrictTest() is 'PASS'
+PASS complexIsFunctionStrictTest() is 'PASS'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/typeof-constant-string.js b/test/webkit/typeof-constant-string.js
new file mode 100644 (file)
index 0000000..ed27f98
--- /dev/null
@@ -0,0 +1,318 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that using the typeof operator on a JavaScript value and comparing it to a constant string works as expected."
+);
+
+function isUndefined(a)
+{
+    return typeof a == "undefined";
+}
+
+shouldBeTrue("isUndefined(undefined)");
+shouldBeFalse("isUndefined(1)");
+
+function isUndefinedStrict(a)
+{
+    return typeof a === "undefined";
+}
+
+shouldBeTrue("isUndefinedStrict(undefined)");
+shouldBeFalse("isUndefinedStrict(1)");
+
+function isBoolean(a)
+{
+    return typeof a == "boolean";
+}
+
+shouldBeTrue("isBoolean(true)");
+shouldBeTrue("isBoolean(false)");
+shouldBeFalse("isBoolean(1)");
+
+function isBooleanStrict(a)
+{
+    return typeof a === "boolean";
+}
+
+shouldBeTrue("isBooleanStrict(true)");
+shouldBeTrue("isBooleanStrict(false)");
+shouldBeFalse("isBooleanStrict(1)");
+
+function isNumber(a)
+{
+    return typeof a == "number";
+}
+
+shouldBeTrue("isNumber(1)");
+shouldBeFalse("isNumber(undefined)");
+
+function isNumberStrict(a)
+{
+    return typeof a === "number";
+}
+
+shouldBeTrue("isNumberStrict(1)");
+shouldBeFalse("isNumberStrict(undefined)");
+
+function isString(a)
+{
+    return typeof a == "string";
+}
+
+shouldBeTrue("isString('string')");
+shouldBeFalse("isString(1)");
+
+function isStringStrict(a)
+{
+    return typeof a === "string";
+}
+
+shouldBeTrue("isStringStrict('string')");
+shouldBeFalse("isStringStrict(1)");
+
+function isObject(a)
+{
+    return typeof a == "object";
+}
+
+shouldBeTrue("isObject({ })");
+shouldBeFalse("isObject(1)");
+
+function isObjectStrict(a)
+{
+    return typeof a === "object";
+}
+
+shouldBeTrue("isObjectStrict({ })");
+shouldBeFalse("isObjectStrict(1)");
+
+function isFunction(a)
+{
+    return typeof a == "function";
+}
+
+shouldBeTrue("isFunction(function () { })");
+shouldBeFalse("isFunction(1)");
+
+function isFunctionStrict(a)
+{
+    return typeof a === "function";
+}
+
+shouldBeTrue("isFunctionStrict(function () { })");
+shouldBeFalse("isFunctionStrict(1)");
+
+function complexIsUndefinedTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o == "undefined") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsUndefinedTest()", "'PASS'");
+
+function complexIsBooleanTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o == "boolean") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsBooleanTest()", "'PASS'");
+
+function complexIsNumberTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o == "number") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsNumberTest()", "'PASS'");
+
+function complexIsStringTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o == "string") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsStringTest()", "'PASS'");
+
+function complexIsObjectTest()
+{
+    var a = ["text", 0];
+    function replace_formats() {
+        var o = function () { };
+        if (typeof o == "string") {
+        } else if (typeof o == "object") {
+        } else if (typeof o == "function" && typeof a[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsObjectTest()", "'PASS'");
+
+function complexIsFunctionTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o == "function") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsFunctionTest()", "'PASS'");
+
+function complexIsUndefinedStrictTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o === "undefined") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsUndefinedStrictTest()", "'PASS'");
+
+function complexIsBooleanStrictTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o === "boolean") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsBooleanStrictTest()", "'PASS'");
+
+function complexIsNumberStrictTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o === "number") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsNumberStrictTest()", "'PASS'");
+
+function complexIsStringStrictTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o === "string") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsStringStrictTest()", "'PASS'");
+
+function complexIsObjectStrictTest()
+{
+    var a = ["text", 0];
+    function replace_formats() {
+        var o = function () { };
+        if (typeof o == "string") {
+        } else if (typeof o === "object") {
+        } else if (typeof o == "function" && typeof a[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsObjectStrictTest()", "'PASS'");
+
+function complexIsFunctionStrictTest()
+{
+    function replace_formats() {
+        var o = ["text", 0];
+        if (typeof o == "string") {
+        } else if (typeof o === "function") {
+        } else if (typeof o == "object" && typeof o[0] == "string") {
+            return "PASS";
+        }
+        return "FAIL";
+    };
+
+    return "%d".replace(/%d/, replace_formats);
+}
+shouldBe("complexIsFunctionStrictTest()", "'PASS'");
diff --git a/test/webkit/unexpected-constant-crash-expected.txt b/test/webkit/unexpected-constant-crash-expected.txt
new file mode 100644 (file)
index 0000000..a8e143b
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that the regexp and unexpected constant counters are not confused with each other. It will fail with an assertion failure in a debug build if this is the case.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/unexpected-constant-crash.js b/test/webkit/unexpected-constant-crash.js
new file mode 100644 (file)
index 0000000..cbca94b
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that the regexp and unexpected constant counters are not confused with each other. It will fail with an assertion failure in a debug build if this is the case."
+);
+
+var r = / /;
+var s;
+delete s;
diff --git a/test/webkit/unmatching-argument-count-expected.txt b/test/webkit/unmatching-argument-count-expected.txt
new file mode 100644 (file)
index 0000000..f41c253
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+PASS eval("f()") is ""
+PASS eval("f(1)") is "1"
+PASS eval("f(1, 2)") is "1, 2"
+PASS eval("f(1, 2, 3)") is "1, 2, 3"
+PASS eval("f(1, 2, 3, 4)") is "1, 2, 3, 4"
+PASS eval("f(1, 2, 3, 4, 5)") is "1, 2, 3, 4, 5"
+PASS eval("f(1, 2, 3, 4, 5, 6)") is "1, 2, 3, 4, 5, 6"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/unmatching-argument-count.js b/test/webkit/unmatching-argument-count.js
new file mode 100644 (file)
index 0000000..0e10a6b
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+function f(a,b,c) {
+   var d, e;
+   var args = "";
+   for (var i = 0; i < arguments.length; i++)
+       args+=arguments[i]+ ((i == arguments.length - 1) ? "" : ", ");
+   return args;
+}
+var a = 0;
+var b = 0;
+var c = 0;
+var d = 0;
+shouldBe('eval("f()")', '""');
+shouldBe('eval("f(1)")', '"1"');
+shouldBe('eval("f(1, 2)")', '"1, 2"');
+shouldBe('eval("f(1, 2, 3)")', '"1, 2, 3"');
+shouldBe('eval("f(1, 2, 3, 4)")', '"1, 2, 3, 4"');
+shouldBe('eval("f(1, 2, 3, 4, 5)")', '"1, 2, 3, 4, 5"');
+shouldBe('eval("f(1, 2, 3, 4, 5, 6)")', '"1, 2, 3, 4, 5, 6"');
diff --git a/test/webkit/var-declarations-zero-width-expected.txt b/test/webkit/var-declarations-zero-width-expected.txt
new file mode 100644 (file)
index 0000000..7998a0f
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests if U+200C and U+200D are allowed as part of an identifier.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS var x‌ = 42; x‌ is 42
+PASS var x‍ = 43; x‍ is 43
+PASS var x‌‍ = 44; x‌‍ is 44
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/var-declarations-zero-width.js b/test/webkit/var-declarations-zero-width.js
new file mode 100644 (file)
index 0000000..8b5f90f
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This page tests if U+200C and U+200D are allowed as part of an identifier.");
+
+shouldBe("var x\u200c = 42; x\u200c", "42");
+shouldBe("var x\u200d = 43; x\u200d", "43");
+shouldBe("var x\u200c\u200d = 44; x\u200c\u200d", "44");
\ No newline at end of file
diff --git a/test/webkit/var-shadows-arg-crash-expected.txt b/test/webkit/var-shadows-arg-crash-expected.txt
new file mode 100644 (file)
index 0000000..1831bc6
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests to ensure that activations are built correctly in the face of duplicate parameter names and do not cause crashes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test()() is "success"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/var-shadows-arg-crash.js b/test/webkit/var-shadows-arg-crash.js
new file mode 100644 (file)
index 0000000..585fa2b
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests to ensure that activations are built correctly in the face of duplicate parameter names and do not cause crashes.'
+);
+
+
+function test(a) {
+    var b, a = "success";
+    return function() {
+        return a;
+    }
+}
+
+shouldBe('test()()', '"success"');
diff --git a/test/webkit/var-shadows-arg-gc-crash-expected.txt b/test/webkit/var-shadows-arg-gc-crash-expected.txt
new file mode 100644 (file)
index 0000000..f193b27
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests to ensure that activations mark their values correctly in the face of duplicate parameter names and does not crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS testClosure() is "success"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/var-shadows-arg-gc-crash.js b/test/webkit/var-shadows-arg-gc-crash.js
new file mode 100644 (file)
index 0000000..0819ec5
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests to ensure that activations mark their values correctly in the face of duplicate parameter names and does not crash.'
+);
+
+function gc()
+{
+    if (this.GCController)
+        GCController.collect();
+    else
+        for (var i = 0; i < 10000; ++i) // Allocate a sufficient number of objects to force a GC.
+            ({});
+}
+
+function eatRegisters(param)
+{
+    if (param > 10)
+        return;
+    eatRegisters(param + 1);
+}
+
+function test(a, c) {
+    var b = ["success"], a, c;
+    return function() {
+        return b[0];
+    }
+}
+
+var testClosure = test();
+
+var extra = test();
+eatRegisters(0);
+gc();
+
+shouldBe('testClosure()', '"success"');
diff --git a/test/webkit/vardecl-blocks-init-expected.txt b/test/webkit/vardecl-blocks-init-expected.txt
new file mode 100644 (file)
index 0000000..935581c
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that variable declarations with initializers inside of catch and with blocks do not set values in a deeper scope.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS catchTest() is 'foo'
+PASS catchTest2() is 'baz'
+PASS withTest() is 'foo'
+PASS withTest2() is 'baz'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/test/webkit/vardecl-blocks-init.js b/test/webkit/vardecl-blocks-init.js
new file mode 100644 (file)
index 0000000..b77f191
--- /dev/null
@@ -0,0 +1,77 @@
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1.  Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+// 2.  Redistributions in binary form must reproduce the above copyright
+//     notice, this list of conditions and the following disclaimer in the
+//     documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that variable declarations with initializers inside of catch and with blocks do not set values in a deeper scope."
+);
+
+function catchTest() {
+  var e = "foo";
+
+  try {
+    throw "bar";
+  } catch (e) {
+    var e = "baz";
+  }
+
+  return e;
+}
+
+function catchTest2() {
+  var e = "foo";
+
+  try {
+    throw "bar";
+  } catch (e) {
+    var e = "baz";
+
+    return e;
+  }
+}
+
+function withTest() {
+  var e = "foo"
+  var object = { 'e' : "bar" };
+
+  with (object) {
+    var e = "baz";
+  }
+
+  return e;
+}
+
+function withTest2() {
+  var e = "foo"
+  var object = { 'e' : "bar" };
+
+  with (object) {
+    var e = "baz";
+
+    return e;
+  }
+}
+
+shouldBe("catchTest()", "'foo'");
+shouldBe("catchTest2()", "'baz'");
+shouldBe("withTest()", "'foo'");
+shouldBe("withTest2()", "'baz'");