Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: test/cctest/interpreter/test-bytecode-generator.cc

Issue 1412683011: [Interpreter] Enable assignments in expressions. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Additional tests for conditional expressions. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // TODO(rmcilroy): Remove this define after this flag is turned on globally 5 // TODO(rmcilroy): Remove this define after this flag is turned on globally
6 #define V8_IMMINENT_DEPRECATION_WARNINGS 6 #define V8_IMMINENT_DEPRECATION_WARNINGS
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/compiler.h" 10 #include "src/compiler.h"
(...skipping 4913 matching lines...) Expand 10 before | Expand all | Expand 10 after
4924 }}, 4924 }},
4925 }; 4925 };
4926 4926
4927 for (size_t i = 0; i < arraysize(snippets); i++) { 4927 for (size_t i = 0; i < arraysize(snippets); i++) {
4928 Handle<BytecodeArray> bytecode_array = 4928 Handle<BytecodeArray> bytecode_array =
4929 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet); 4929 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
4930 CheckBytecodeArrayEqual(snippets[i], bytecode_array); 4930 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
4931 } 4931 }
4932 } 4932 }
4933 4933
4934
4935 TEST(AssignmentsInBinaryExpression) {
4936 InitializedHandleScope handle_scope;
4937 BytecodeGeneratorHelper helper;
4938
4939 ExpectedSnippet<const char*> snippets[] = {
4940 {"var x = 0, y = 1;\n"
4941 "return (x = 2, y = 3, x = 4, y = 5)",
4942 2 * kPointerSize,
4943 1,
4944 24,
4945 {
4946 B(LdaZero), B(Star), R(0), //
4947 B(LdaSmi8), U8(1), //
4948 B(Star), R(1), //
4949 B(LdaSmi8), U8(2), //
4950 B(Star), R(0), //
4951 B(LdaSmi8), U8(3), //
4952 B(Star), R(1), //
4953 B(LdaSmi8), U8(4), //
4954 B(Star), R(0), //
4955 B(LdaSmi8), U8(5), //
4956 B(Star), R(1), //
4957 B(Return), //
4958 },
4959 0},
4960 {"var x = 55;\n"
4961 "var y = (x = 100);\n"
4962 "return y",
4963 2 * kPointerSize,
4964 1,
4965 13,
4966 {
4967 B(LdaSmi8), U8(55), //
4968 B(Star), R(0), //
4969 B(LdaSmi8), U8(100), //
4970 B(Star), R(0), //
4971 B(Star), R(1), //
4972 B(Ldar), R(1), //
4973 B(Return), //
4974 },
4975 0},
4976 {"var x = 55;\n"
4977 "x = x + (x = 100) + (x = 101);\n"
4978 "return x;",
4979 4 * kPointerSize,
4980 1,
4981 26,
4982 {
4983 B(LdaSmi8), U8(55), //
4984 B(Star), R(0), //
4985 B(LdaSmi8), U8(100), //
4986 B(Star), R(1), //
4987 B(Add), R(0), //
4988 B(Star), R(2), //
4989 B(LdaSmi8), U8(101), //
4990 B(Star), R(3), //
4991 B(Add), R(2), //
4992 B(Mov), R(3), R(0), //
4993 B(Star), R(0), //
4994 B(Ldar), R(0), //
4995 B(Return), //
4996 },
4997 0},
4998 // TODO(oth): Add return x + (x++) + (++x);
rmcilroy 2015/11/03 14:17:52 Add this?
oth 2015/11/04 10:03:37 Done.
4999 {"var x = 55;\n"
5000 "x = (x = 56) - x + (x = 57);\n"
5001 "x++;\n"
5002 "return x;",
5003 3 * kPointerSize,
5004 1,
5005 38,
5006 {
5007 B(LdaSmi8), U8(55), //
5008 B(Star), R(0), //
5009 B(LdaSmi8), U8(56), //
5010 B(Star), R(0), //
5011 B(Star), R(1), //
5012 B(Ldar), R(0), //
5013 B(Sub), R(1), //
5014 B(Star), R(2), //
5015 B(LdaSmi8), U8(57), //
5016 B(Star), R(1), //
5017 B(Add), R(2), //
5018 B(Mov), R(1), R(0), //
5019 B(Star), R(0), //
5020 B(Ldar), R(0), //
5021 B(ToNumber), //
5022 B(Star), R(1), //
5023 B(Inc), //
5024 B(Star), R(0), //
5025 B(Ldar), R(0), //
5026 B(Return), //
5027 },
5028 0},
5029 {"var x = 55;\n"
5030 "var y = x + (x = 1) + (x = 2) + (x = 3);\n"
5031 "return y;",
5032 6 * kPointerSize,
5033 1,
5034 34,
5035 {
5036 B(LdaSmi8), U8(55), //
5037 B(Star), R(0), //
5038 B(LdaSmi8), U8(1), //
5039 B(Star), R(2), //
5040 B(Add), R(0), //
5041 B(Star), R(3), //
5042 B(LdaSmi8), U8(2), //
5043 B(Star), R(4), //
5044 B(Add), R(3), //
5045 B(Star), R(5), //
5046 B(LdaSmi8), U8(3), //
5047 B(Star), R(3), //
5048 B(Add), R(5), //
5049 B(Mov), R(3), R(0), //
5050 B(Star), R(1), //
5051 B(Ldar), R(1), //
5052 B(Return), //
5053 },
5054 0},
5055 {"var x = 55;\n"
5056 "var x = x + (x = 1) + (x = 2) + (x = 3);\n"
5057 "return x;",
5058 5 * kPointerSize,
5059 1,
5060 34,
5061 {
5062 B(LdaSmi8), U8(55), //
5063 B(Star), R(0), //
5064 B(LdaSmi8), U8(1), //
5065 B(Star), R(1), //
5066 B(Add), R(0), //
5067 B(Star), R(2), //
5068 B(LdaSmi8), U8(2), //
5069 B(Star), R(3), //
5070 B(Add), R(2), //
5071 B(Star), R(4), //
5072 B(LdaSmi8), U8(3), //
5073 B(Star), R(2), //
5074 B(Add), R(4), //
5075 B(Mov), R(2), R(0), //
5076 B(Star), R(0), //
5077 B(Ldar), R(0), //
5078 B(Return), //
5079 },
5080 0},
5081 {"var x = 10, y = 20;\n"
5082 "return x + (x = 1) + (x + 1) * (y = 2) + (y = 3) + (x = 4) + (y = 5) + "
5083 "y;\n",
5084 6 * kPointerSize,
5085 1,
5086 64,
5087 {
5088 B(LdaSmi8), U8(10), //
5089 B(Star), R(0), //
5090 B(LdaSmi8), U8(20), //
5091 B(Star), R(1), //
5092 B(LdaSmi8), U8(1), //
5093 B(Star), R(2), //
5094 B(Add), R(0), //
5095 B(Star), R(3), //
5096 B(LdaSmi8), U8(1), //
5097 B(Add), R(2), //
5098 B(Star), R(4), //
5099 B(LdaSmi8), U8(2), //
5100 B(Star), R(1), //
5101 B(Mul), R(4), //
5102 B(Add), R(3), //
5103 B(Star), R(4), //
5104 B(LdaSmi8), U8(3), //
5105 B(Star), R(1), //
5106 B(Add), R(4), //
5107 B(Star), R(3), //
5108 B(LdaSmi8), U8(4), //
5109 B(Star), R(4), //
5110 B(Add), R(3), //
5111 B(Star), R(5), //
5112 B(LdaSmi8), U8(5), //
5113 B(Star), R(1), //
5114 B(Add), R(5), //
5115 B(Star), R(3), //
5116 B(Ldar), R(1), //
5117 B(Add), R(3), //
5118 B(Mov), R(4), R(0), //
5119 B(Return), //
5120 },
5121 0},
5122 };
5123
5124 for (size_t i = 0; i < arraysize(snippets); i++) {
5125 Handle<BytecodeArray> bytecode_array =
5126 helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
5127 CheckBytecodeArrayEqual(snippets[i], bytecode_array);
5128 }
5129 }
5130
4934 } // namespace interpreter 5131 } // namespace interpreter
4935 } // namespace internal 5132 } // namespace internal
4936 } // namespace v8 5133 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698