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

Side by Side Diff: test/cctest/test-asm-validator.cc

Issue 1812383002: Number lines in test-asm-validator from 1. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 months 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/ast/ast.h" 7 #include "src/ast/ast.h"
8 #include "src/ast/ast-expression-visitor.h" 8 #include "src/ast/ast-expression-visitor.h"
9 #include "src/ast/scopes.h" 9 #include "src/ast/scopes.h"
10 #include "src/parsing/parser.h" 10 #include "src/parsing/parser.h"
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 CHECK_EXPR(CompareOperation, Bounds(cache.kAsmSigned)) { 176 CHECK_EXPR(CompareOperation, Bounds(cache.kAsmSigned)) {
177 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) { 177 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
178 CHECK_VAR(p, Bounds(cache.kAsmInt)); 178 CHECK_VAR(p, Bounds(cache.kAsmInt));
179 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum)); 179 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
180 } 180 }
181 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) { 181 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
182 CHECK_VAR(q, Bounds(cache.kAsmInt)); 182 CHECK_VAR(q, Bounds(cache.kAsmInt));
183 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum)); 183 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
184 } 184 }
185 } 185 }
186 // p = (p + 8)|0) {\n" 186 // p = (p + 8)|0) {
187 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) { 187 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
188 CHECK_VAR(p, Bounds(cache.kAsmInt)); 188 CHECK_VAR(p, Bounds(cache.kAsmInt));
189 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) { 189 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
190 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmInt)) { 190 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmInt)) {
191 CHECK_VAR(p, Bounds(cache.kAsmInt)); 191 CHECK_VAR(p, Bounds(cache.kAsmInt));
192 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum)); 192 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
193 } 193 }
194 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum)); 194 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
195 } 195 }
196 } 196 }
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 " function bar() {}\n" 347 " function bar() {}\n"
348 "}\n"; 348 "}\n";
349 v8::V8::Initialize(); 349 v8::V8::Initialize();
350 HandleAndZoneScope handles; 350 HandleAndZoneScope handles;
351 Zone* zone = handles.main_zone(); 351 Zone* zone = handles.main_zone();
352 ZoneVector<ExpressionTypeEntry> types(zone); 352 ZoneVector<ExpressionTypeEntry> types(zone);
353 CHECK_EQ("asm: line 2: last statement in module is not a return\n", 353 CHECK_EQ("asm: line 2: last statement in module is not a return\n",
354 Validate(zone, test_function, &types)); 354 Validate(zone, test_function, &types));
355 } 355 }
356 356
357 #define HARNESS_STDLIB() \
358 "var Infinity = stdlib.Infinity; " \
359 "var NaN = stdlib.NaN; " \
360 "var acos = stdlib.Math.acos; " \
361 "var asin = stdlib.Math.asin; " \
362 "var atan = stdlib.Math.atan; " \
363 "var cos = stdlib.Math.cos; " \
364 "var sin = stdlib.Math.sin; " \
365 "var tan = stdlib.Math.tan; " \
366 "var exp = stdlib.Math.exp; " \
367 "var log = stdlib.Math.log; " \
368 "var ceil = stdlib.Math.ceil; " \
369 "var floor = stdlib.Math.floor; " \
370 "var sqrt = stdlib.Math.sqrt; " \
371 "var min = stdlib.Math.min; " \
372 "var max = stdlib.Math.max; " \
373 "var atan2 = stdlib.Math.atan2; " \
374 "var pow = stdlib.Math.pow; " \
375 "var abs = stdlib.Math.abs; " \
376 "var imul = stdlib.Math.imul; " \
377 "var fround = stdlib.Math.fround; " \
378 "var E = stdlib.Math.E; " \
379 "var LN10 = stdlib.Math.LN10; " \
380 "var LN2 = stdlib.Math.LN2; " \
381 "var LOG2E = stdlib.Math.LOG2E; " \
382 "var LOG10E = stdlib.Math.LOG10E; " \
383 "var PI = stdlib.Math.PI; " \
384 "var SQRT1_2 = stdlib.Math.SQRT1_2; " \
385 "var SQRT2 = stdlib.Math.SQRT2; "
357 386
358 #define HARNESS_STDLIB() \ 387 #define HARNESS_HEAP() \
359 "var Infinity = stdlib.Infinity;\n" \ 388 "var u8 = new stdlib.Uint8Array(buffer); " \
360 "var NaN = stdlib.NaN;\n" \ 389 "var i8 = new stdlib.Int8Array(buffer); " \
361 "var acos = stdlib.Math.acos;\n" \ 390 "var u16 = new stdlib.Uint16Array(buffer); " \
362 "var asin = stdlib.Math.asin;\n" \ 391 "var i16 = new stdlib.Int16Array(buffer); " \
363 "var atan = stdlib.Math.atan;\n" \ 392 "var u32 = new stdlib.Uint32Array(buffer); " \
364 "var cos = stdlib.Math.cos;\n" \ 393 "var i32 = new stdlib.Int32Array(buffer); " \
365 "var sin = stdlib.Math.sin;\n" \ 394 "var f32 = new stdlib.Float32Array(buffer); " \
366 "var tan = stdlib.Math.tan;\n" \ 395 "var f64 = new stdlib.Float64Array(buffer); "
367 "var exp = stdlib.Math.exp;\n" \
368 "var log = stdlib.Math.log;\n" \
369 "var ceil = stdlib.Math.ceil;\n" \
370 "var floor = stdlib.Math.floor;\n" \
371 "var sqrt = stdlib.Math.sqrt;\n" \
372 "var min = stdlib.Math.min;\n" \
373 "var max = stdlib.Math.max;\n" \
374 "var atan2 = stdlib.Math.atan2;\n" \
375 "var pow = stdlib.Math.pow;\n" \
376 "var abs = stdlib.Math.abs;\n" \
377 "var imul = stdlib.Math.imul;\n" \
378 "var fround = stdlib.Math.fround;\n" \
379 "var E = stdlib.Math.E;\n" \
380 "var LN10 = stdlib.Math.LN10;\n" \
381 "var LN2 = stdlib.Math.LN2;\n" \
382 "var LOG2E = stdlib.Math.LOG2E;\n" \
383 "var LOG10E = stdlib.Math.LOG10E;\n" \
384 "var PI = stdlib.Math.PI;\n" \
385 "var SQRT1_2 = stdlib.Math.SQRT1_2;\n" \
386 "var SQRT2 = stdlib.Math.SQRT2;\n"
387 396
388 397 #define HARNESS_PREAMBLE() \
389 #define HARNESS_HEAP() \ 398 const char test_function[] = \
390 "var u8 = new stdlib.Uint8Array(buffer);\n" \ 399 "function Module(stdlib, foreign, buffer) { " \
391 "var i8 = new stdlib.Int8Array(buffer);\n" \ 400 "\"use asm\"; " HARNESS_STDLIB() HARNESS_HEAP()
392 "var u16 = new stdlib.Uint16Array(buffer);\n" \
393 "var i16 = new stdlib.Int16Array(buffer);\n" \
394 "var u32 = new stdlib.Uint32Array(buffer);\n" \
395 "var i32 = new stdlib.Int32Array(buffer);\n" \
396 "var f32 = new stdlib.Float32Array(buffer);\n" \
397 "var f64 = new stdlib.Float64Array(buffer);\n"
398
399
400 #define HARNESS_PREAMBLE() \
401 const char test_function[] = \
402 "function Module(stdlib, foreign, buffer) {\n" \
403 "\"use asm\";\n" HARNESS_STDLIB() HARNESS_HEAP()
404
405 401
406 #define HARNESS_POSTAMBLE() \ 402 #define HARNESS_POSTAMBLE() \
407 "return { foo: foo };\n" \ 403 "return { foo: foo }; " \
408 "}\n"; 404 "} ";
409
410 405
411 #define CHECK_VAR_MATH_SHORTCUT(name, type) \ 406 #define CHECK_VAR_MATH_SHORTCUT(name, type) \
412 CHECK_EXPR(Assignment, type) { \ 407 CHECK_EXPR(Assignment, type) { \
413 CHECK_VAR(name, type); \ 408 CHECK_VAR(name, type); \
414 CHECK_EXPR(Property, type) { \ 409 CHECK_EXPR(Property, type) { \
415 CHECK_EXPR(Property, Bounds::Unbounded()) { \ 410 CHECK_EXPR(Property, Bounds::Unbounded()) { \
416 CHECK_VAR(stdlib, Bounds::Unbounded()); \ 411 CHECK_VAR(stdlib, Bounds::Unbounded()); \
417 CHECK_EXPR(Literal, Bounds::Unbounded()); \ 412 CHECK_EXPR(Literal, Bounds::Unbounded()); \
418 } \ 413 } \
419 CHECK_EXPR(Literal, Bounds::Unbounded()); \ 414 CHECK_EXPR(Literal, Bounds::Unbounded()); \
(...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after
1081 CHECK_SKIP(); 1076 CHECK_SKIP();
1082 } 1077 }
1083 CHECK_FUNC_TYPES_END 1078 CHECK_FUNC_TYPES_END
1084 } 1079 }
1085 1080
1086 1081
1087 TEST(UnsignedFromFloat64) { 1082 TEST(UnsignedFromFloat64) {
1088 CHECK_FUNC_ERROR( 1083 CHECK_FUNC_ERROR(
1089 "function bar() { var x = 1.0; return (x>>>0)|0; }\n" 1084 "function bar() { var x = 1.0; return (x>>>0)|0; }\n"
1090 "function foo() { bar(); }", 1085 "function foo() { bar(); }",
1091 "asm: line 39: left bitwise operand expected to be an integer\n"); 1086 "asm: line 1: left bitwise operand expected to be an integer\n");
1092 } 1087 }
1093 1088
1094 1089
1095 TEST(AndFloat64) { 1090 TEST(AndFloat64) {
1096 CHECK_FUNC_ERROR( 1091 CHECK_FUNC_ERROR(
1097 "function bar() { var x = 1.0; return (x&0)|0; }\n" 1092 "function bar() { var x = 1.0; return (x&0)|0; }\n"
1098 "function foo() { bar(); }", 1093 "function foo() { bar(); }",
1099 "asm: line 39: left bitwise operand expected to be an integer\n"); 1094 "asm: line 1: left bitwise operand expected to be an integer\n");
1100 } 1095 }
1101 1096
1102 1097
1103 TEST(TypeMismatchAddInt32Float64) { 1098 TEST(TypeMismatchAddInt32Float64) {
1104 CHECK_FUNC_ERROR( 1099 CHECK_FUNC_ERROR(
1105 "function bar() { var x = 1.0; var y = 0; return (x + y)|0; }\n" 1100 "function bar() { var x = 1.0; var y = 0; return (x + y)|0; }\n"
1106 "function foo() { bar(); }", 1101 "function foo() { bar(); }",
1107 "asm: line 39: ill-typed arithmetic operation\n"); 1102 "asm: line 1: ill-typed arithmetic operation\n");
1108 } 1103 }
1109 1104
1110 1105
1111 TEST(TypeMismatchSubInt32Float64) { 1106 TEST(TypeMismatchSubInt32Float64) {
1112 CHECK_FUNC_ERROR( 1107 CHECK_FUNC_ERROR(
1113 "function bar() { var x = 1.0; var y = 0; return (x - y)|0; }\n" 1108 "function bar() { var x = 1.0; var y = 0; return (x - y)|0; }\n"
1114 "function foo() { bar(); }", 1109 "function foo() { bar(); }",
1115 "asm: line 39: ill-typed arithmetic operation\n"); 1110 "asm: line 1: ill-typed arithmetic operation\n");
1116 } 1111 }
1117 1112
1118 1113
1119 TEST(TypeMismatchDivInt32Float64) { 1114 TEST(TypeMismatchDivInt32Float64) {
1120 CHECK_FUNC_ERROR( 1115 CHECK_FUNC_ERROR(
1121 "function bar() { var x = 1.0; var y = 0; return (x / y)|0; }\n" 1116 "function bar() { var x = 1.0; var y = 0; return (x / y)|0; }\n"
1122 "function foo() { bar(); }", 1117 "function foo() { bar(); }",
1123 "asm: line 39: ill-typed arithmetic operation\n"); 1118 "asm: line 1: ill-typed arithmetic operation\n");
1124 } 1119 }
1125 1120
1126 1121
1127 TEST(TypeMismatchModInt32Float64) { 1122 TEST(TypeMismatchModInt32Float64) {
1128 CHECK_FUNC_ERROR( 1123 CHECK_FUNC_ERROR(
1129 "function bar() { var x = 1.0; var y = 0; return (x % y)|0; }\n" 1124 "function bar() { var x = 1.0; var y = 0; return (x % y)|0; }\n"
1130 "function foo() { bar(); }", 1125 "function foo() { bar(); }",
1131 "asm: line 39: ill-typed arithmetic operation\n"); 1126 "asm: line 1: ill-typed arithmetic operation\n");
1132 } 1127 }
1133 1128
1134 1129
1135 TEST(ModFloat32) { 1130 TEST(ModFloat32) {
1136 CHECK_FUNC_ERROR( 1131 CHECK_FUNC_ERROR(
1137 "function bar() { var x = fround(1.0); return (x % x)|0; }\n" 1132 "function bar() { var x = fround(1.0); return (x % x)|0; }\n"
1138 "function foo() { bar(); }", 1133 "function foo() { bar(); }",
1139 "asm: line 39: ill-typed arithmetic operation\n"); 1134 "asm: line 1: ill-typed arithmetic operation\n");
1140 } 1135 }
1141 1136
1142 1137
1143 TEST(TernaryMismatchInt32Float64) { 1138 TEST(TernaryMismatchInt32Float64) {
1144 CHECK_FUNC_ERROR( 1139 CHECK_FUNC_ERROR(
1145 "function bar() { var x = 1; var y = 0.0; return (1 ? x : y)|0; }\n" 1140 "function bar() { var x = 1; var y = 0.0; return (1 ? x : y)|0; }\n"
1146 "function foo() { bar(); }", 1141 "function foo() { bar(); }",
1147 "asm: line 39: then and else expressions in ? must have the same type\n"); 1142 "asm: line 1: then and else expressions in ? must have the same type\n");
1148 } 1143 }
1149 1144
1150 1145
1151 TEST(TernaryMismatchIntish) { 1146 TEST(TernaryMismatchIntish) {
1152 CHECK_FUNC_ERROR( 1147 CHECK_FUNC_ERROR(
1153 "function bar() { var x = 1; var y = 0; return (1 ? x + x : y)|0; }\n" 1148 "function bar() { var x = 1; var y = 0; return (1 ? x + x : y)|0; }\n"
1154 "function foo() { bar(); }", 1149 "function foo() { bar(); }",
1155 "asm: line 39: invalid type in ? then expression\n"); 1150 "asm: line 1: invalid type in ? then expression\n");
1156 } 1151 }
1157 1152
1158 1153
1159 TEST(TernaryMismatchInt32Float32) { 1154 TEST(TernaryMismatchInt32Float32) {
1160 CHECK_FUNC_ERROR( 1155 CHECK_FUNC_ERROR(
1161 "function bar() { var x = 1; var y = 2; return (x?fround(y):x)|0; }\n" 1156 "function bar() { var x = 1; var y = 2; return (x?fround(y):x)|0; }\n"
1162 "function foo() { bar(); }", 1157 "function foo() { bar(); }",
1163 "asm: line 39: then and else expressions in ? must have the same type\n"); 1158 "asm: line 1: then and else expressions in ? must have the same type\n");
1164 } 1159 }
1165 1160
1166 1161
1167 TEST(TernaryBadCondition) { 1162 TEST(TernaryBadCondition) {
1168 CHECK_FUNC_ERROR( 1163 CHECK_FUNC_ERROR(
1169 "function bar() { var x = 1; var y = 2.0; return (y?x:1)|0; }\n" 1164 "function bar() { var x = 1; var y = 2.0; return (y?x:1)|0; }\n"
1170 "function foo() { bar(); }", 1165 "function foo() { bar(); }",
1171 "asm: line 39: condition must be of type int\n"); 1166 "asm: line 1: condition must be of type int\n");
1172 } 1167 }
1173 1168
1174 TEST(BadIntishMultiply) { 1169 TEST(BadIntishMultiply) {
1175 CHECK_FUNC_ERROR( 1170 CHECK_FUNC_ERROR(
1176 "function bar() { var x = 1; return ((x + x) * 4) | 0; }\n" 1171 "function bar() { var x = 1; return ((x + x) * 4) | 0; }\n"
1177 "function foo() { bar(); }", 1172 "function foo() { bar(); }",
1178 "asm: line 39: intish not allowed in multiply\n"); 1173 "asm: line 1: intish not allowed in multiply\n");
1179 } 1174 }
1180 1175
1181 TEST(FroundFloat32) { 1176 TEST(FroundFloat32) {
1182 CHECK_FUNC_TYPES_BEGIN( 1177 CHECK_FUNC_TYPES_BEGIN(
1183 "function bar() { var x = 1; return fround(x); }\n" 1178 "function bar() { var x = 1; return fround(x); }\n"
1184 "function foo() { bar(); }") { 1179 "function foo() { bar(); }") {
1185 CHECK_EXPR(FunctionLiteral, FUNC_F_TYPE) { 1180 CHECK_EXPR(FunctionLiteral, FUNC_F_TYPE) {
1186 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) { 1181 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
1187 CHECK_VAR(x, Bounds(cache.kAsmInt)); 1182 CHECK_VAR(x, Bounds(cache.kAsmInt));
1188 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum)); 1183 CHECK_EXPR(Literal, Bounds(cache.kAsmFixnum));
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1228 CHECK_SKIP(); 1223 CHECK_SKIP();
1229 } 1224 }
1230 CHECK_FUNC_TYPES_END 1225 CHECK_FUNC_TYPES_END
1231 } 1226 }
1232 1227
1233 1228
1234 TEST(Multiplication2) { 1229 TEST(Multiplication2) {
1235 CHECK_FUNC_ERROR( 1230 CHECK_FUNC_ERROR(
1236 "function bar() { var x = 1; var y = 2; return (x*y)|0; }\n" 1231 "function bar() { var x = 1; var y = 2; return (x*y)|0; }\n"
1237 "function foo() { bar(); }", 1232 "function foo() { bar(); }",
1238 "asm: line 39: multiply must be by an integer literal\n"); 1233 "asm: line 1: multiply must be by an integer literal\n");
1239 } 1234 }
1240 1235
1241 1236
1242 TEST(Division4) { 1237 TEST(Division4) {
1243 CHECK_FUNC_ERROR( 1238 CHECK_FUNC_ERROR(
1244 "function bar() { var x = 1; var y = 2; return (x/y/x/y)|0; }\n" 1239 "function bar() { var x = 1; var y = 2; return (x/y/x/y)|0; }\n"
1245 "function foo() { bar(); }", 1240 "function foo() { bar(); }",
1246 "asm: line 39: too many consecutive multiplicative ops\n"); 1241 "asm: line 1: too many consecutive multiplicative ops\n");
1247 } 1242 }
1248 1243
1249 1244
1250 TEST(CompareToStringLeft) { 1245 TEST(CompareToStringLeft) {
1251 CHECK_FUNC_ERROR( 1246 CHECK_FUNC_ERROR(
1252 "function bar() { var x = 1; return ('hi' > x)|0; }\n" 1247 "function bar() { var x = 1; return ('hi' > x)|0; }\n"
1253 "function foo() { bar(); }", 1248 "function foo() { bar(); }",
1254 "asm: line 39: bad type on left side of comparison\n"); 1249 "asm: line 1: bad type on left side of comparison\n");
1255 } 1250 }
1256 1251
1257 1252
1258 TEST(CompareToStringRight) { 1253 TEST(CompareToStringRight) {
1259 CHECK_FUNC_ERROR( 1254 CHECK_FUNC_ERROR(
1260 "function bar() { var x = 1; return (x < 'hi')|0; }\n" 1255 "function bar() { var x = 1; return (x < 'hi')|0; }\n"
1261 "function foo() { bar(); }", 1256 "function foo() { bar(); }",
1262 "asm: line 39: bad type on right side of comparison\n"); 1257 "asm: line 1: bad type on right side of comparison\n");
1263 } 1258 }
1264 1259
1265 1260
1266 TEST(CompareMismatchInt32Float64) { 1261 TEST(CompareMismatchInt32Float64) {
1267 CHECK_FUNC_ERROR( 1262 CHECK_FUNC_ERROR(
1268 "function bar() { var x = 1; var y = 2.0; return (x < y)|0; }\n" 1263 "function bar() { var x = 1; var y = 2.0; return (x < y)|0; }\n"
1269 "function foo() { bar(); }", 1264 "function foo() { bar(); }",
1270 "asm: line 39: left and right side of comparison must match\n"); 1265 "asm: line 1: left and right side of comparison must match\n");
1271 } 1266 }
1272 1267
1273 1268
1274 TEST(CompareMismatchInt32Uint32) { 1269 TEST(CompareMismatchInt32Uint32) {
1275 CHECK_FUNC_ERROR( 1270 CHECK_FUNC_ERROR(
1276 "function bar() { var x = 1; var y = 2; return ((x|0) < (y>>>0))|0; }\n" 1271 "function bar() { var x = 1; var y = 2; return ((x|0) < (y>>>0))|0; }\n"
1277 "function foo() { bar(); }", 1272 "function foo() { bar(); }",
1278 "asm: line 39: left and right side of comparison must match\n"); 1273 "asm: line 1: left and right side of comparison must match\n");
1279 } 1274 }
1280 1275
1281 1276
1282 TEST(CompareMismatchInt32Float32) { 1277 TEST(CompareMismatchInt32Float32) {
1283 CHECK_FUNC_ERROR( 1278 CHECK_FUNC_ERROR(
1284 "function bar() { var x = 1; var y = 2; return (x < fround(y))|0; }\n" 1279 "function bar() { var x = 1; var y = 2; return (x < fround(y))|0; }\n"
1285 "function foo() { bar(); }", 1280 "function foo() { bar(); }",
1286 "asm: line 39: left and right side of comparison must match\n"); 1281 "asm: line 1: left and right side of comparison must match\n");
1287 } 1282 }
1288 1283
1289 1284
1290 TEST(Float64ToInt32) { 1285 TEST(Float64ToInt32) {
1291 CHECK_FUNC_TYPES_BEGIN( 1286 CHECK_FUNC_TYPES_BEGIN(
1292 "function bar() { var x = 1; var y = 0.0; x = ~~y; }\n" 1287 "function bar() { var x = 1; var y = 0.0; x = ~~y; }\n"
1293 "function foo() { bar(); }") { 1288 "function foo() { bar(); }") {
1294 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) { 1289 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) {
1295 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) { 1290 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
1296 CHECK_VAR(x, Bounds(cache.kAsmInt)); 1291 CHECK_VAR(x, Bounds(cache.kAsmInt));
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
1617 } 1612 }
1618 1613
1619 1614
1620 TEST(BadFunctionTable) { 1615 TEST(BadFunctionTable) {
1621 CHECK_FUNC_ERROR( 1616 CHECK_FUNC_ERROR(
1622 "function func1(x) { x = x | 0; return (x * 5) | 0; }\n" 1617 "function func1(x) { x = x | 0; return (x * 5) | 0; }\n"
1623 "var table1 = [func1, 1];\n" 1618 "var table1 = [func1, 1];\n"
1624 "function bar(x, y) { x = x | 0; y = y | 0;\n" 1619 "function bar(x, y) { x = x | 0; y = y | 0;\n"
1625 " return table1[x & 1](y)|0; }\n" 1620 " return table1[x & 1](y)|0; }\n"
1626 "function foo() { bar(1, 2); }", 1621 "function foo() { bar(1, 2); }",
1627 "asm: line 40: array component expected to be a function\n"); 1622 "asm: line 2: array component expected to be a function\n");
1628 } 1623 }
1629 1624
1630 1625
1631 TEST(MissingParameterTypes) { 1626 TEST(MissingParameterTypes) {
1632 CHECK_FUNC_ERROR( 1627 CHECK_FUNC_ERROR(
1633 "function bar(x) { var y = 1; }\n" 1628 "function bar(x) { var y = 1; }\n"
1634 "function foo() { bar(2); }", 1629 "function foo() { bar(2); }",
1635 "asm: line 39: missing parameter type annotations\n"); 1630 "asm: line 1: missing parameter type annotations\n");
1636 } 1631 }
1637 1632
1638 1633
1639 TEST(InvalidTypeAnnotationBinaryOpDiv) { 1634 TEST(InvalidTypeAnnotationBinaryOpDiv) {
1640 CHECK_FUNC_ERROR( 1635 CHECK_FUNC_ERROR(
1641 "function bar(x) { x = x / 4; }\n" 1636 "function bar(x) { x = x / 4; }\n"
1642 "function foo() { bar(2); }", 1637 "function foo() { bar(2); }",
1643 "asm: line 39: invalid type annotation on binary op\n"); 1638 "asm: line 1: invalid type annotation on binary op\n");
1644 } 1639 }
1645 1640
1646 1641
1647 TEST(InvalidTypeAnnotationBinaryOpMul) { 1642 TEST(InvalidTypeAnnotationBinaryOpMul) {
1648 CHECK_FUNC_ERROR( 1643 CHECK_FUNC_ERROR(
1649 "function bar(x) { x = x * 4.0; }\n" 1644 "function bar(x) { x = x * 4.0; }\n"
1650 "function foo() { bar(2); }", 1645 "function foo() { bar(2); }",
1651 "asm: line 39: invalid type annotation on binary op\n"); 1646 "asm: line 1: invalid type annotation on binary op\n");
1652 } 1647 }
1653 1648
1654 1649
1655 TEST(InvalidArgumentCount) { 1650 TEST(InvalidArgumentCount) {
1656 CHECK_FUNC_ERROR( 1651 CHECK_FUNC_ERROR(
1657 "function bar(x) { return fround(4, 5); }\n" 1652 "function bar(x) { return fround(4, 5); }\n"
1658 "function foo() { bar(); }", 1653 "function foo() { bar(); }",
1659 "asm: line 39: invalid argument count calling function\n"); 1654 "asm: line 1: invalid argument count calling function\n");
1660 } 1655 }
1661 1656
1662 1657
1663 TEST(InvalidTypeAnnotationArity) { 1658 TEST(InvalidTypeAnnotationArity) {
1664 CHECK_FUNC_ERROR( 1659 CHECK_FUNC_ERROR(
1665 "function bar(x) { x = max(x); }\n" 1660 "function bar(x) { x = max(x); }\n"
1666 "function foo() { bar(3); }", 1661 "function foo() { bar(3); }",
1667 "asm: line 39: only fround allowed on expression annotations\n"); 1662 "asm: line 1: only fround allowed on expression annotations\n");
1668 } 1663 }
1669 1664
1670 1665
1671 TEST(InvalidTypeAnnotationOnlyFround) { 1666 TEST(InvalidTypeAnnotationOnlyFround) {
1672 CHECK_FUNC_ERROR( 1667 CHECK_FUNC_ERROR(
1673 "function bar(x) { x = sin(x); }\n" 1668 "function bar(x) { x = sin(x); }\n"
1674 "function foo() { bar(3); }", 1669 "function foo() { bar(3); }",
1675 "asm: line 39: only fround allowed on expression annotations\n"); 1670 "asm: line 1: only fround allowed on expression annotations\n");
1676 } 1671 }
1677 1672
1678 1673
1679 TEST(InvalidTypeAnnotation) { 1674 TEST(InvalidTypeAnnotation) {
1680 CHECK_FUNC_ERROR( 1675 CHECK_FUNC_ERROR(
1681 "function bar(x) { x = (x+x)(x); }\n" 1676 "function bar(x) { x = (x+x)(x); }\n"
1682 "function foo() { bar(3); }", 1677 "function foo() { bar(3); }",
1683 "asm: line 39: invalid type annotation\n"); 1678 "asm: line 1: invalid type annotation\n");
1684 } 1679 }
1685 1680
1686 1681
1687 TEST(WithStatement) { 1682 TEST(WithStatement) {
1688 CHECK_FUNC_ERROR( 1683 CHECK_FUNC_ERROR(
1689 "function bar() { var x = 0; with (x) { x = x + 1; } }\n" 1684 "function bar() { var x = 0; with (x) { x = x + 1; } }\n"
1690 "function foo() { bar(); }", 1685 "function foo() { bar(); }",
1691 "asm: line 39: bad with statement\n"); 1686 "asm: line 1: bad with statement\n");
1692 } 1687 }
1693 1688
1694 1689
1695 TEST(NestedFunction) { 1690 TEST(NestedFunction) {
1696 CHECK_FUNC_ERROR( 1691 CHECK_FUNC_ERROR(
1697 "function bar() { function x() { return 1; } }\n" 1692 "function bar() { function x() { return 1; } }\n"
1698 "function foo() { bar(); }", 1693 "function foo() { bar(); }",
1699 "asm: line 39: function declared inside another\n"); 1694 "asm: line 1: function declared inside another\n");
1700 } 1695 }
1701 1696
1702 1697
1703 TEST(UnboundVariable) { 1698 TEST(UnboundVariable) {
1704 CHECK_FUNC_ERROR( 1699 CHECK_FUNC_ERROR(
1705 "function bar() { var x = y; }\n" 1700 "function bar() { var x = y; }\n"
1706 "function foo() { bar(); }", 1701 "function foo() { bar(); }",
1707 "asm: line 39: unbound variable\n"); 1702 "asm: line 1: unbound variable\n");
1708 } 1703 }
1709 1704
1710 1705
1711 TEST(EqStrict) { 1706 TEST(EqStrict) {
1712 CHECK_FUNC_ERROR( 1707 CHECK_FUNC_ERROR(
1713 "function bar() { return (0 === 0)|0; }\n" 1708 "function bar() { return (0 === 0)|0; }\n"
1714 "function foo() { bar(); }", 1709 "function foo() { bar(); }",
1715 "asm: line 39: illegal comparison operator\n"); 1710 "asm: line 1: illegal comparison operator\n");
1716 } 1711 }
1717 1712
1718 1713
1719 TEST(NeStrict) { 1714 TEST(NeStrict) {
1720 CHECK_FUNC_ERROR( 1715 CHECK_FUNC_ERROR(
1721 "function bar() { return (0 !== 0)|0; }\n" 1716 "function bar() { return (0 !== 0)|0; }\n"
1722 "function foo() { bar(); }", 1717 "function foo() { bar(); }",
1723 "asm: line 39: illegal comparison operator\n"); 1718 "asm: line 1: illegal comparison operator\n");
1724 } 1719 }
1725 1720
1726 1721
1727 TEST(InstanceOf) { 1722 TEST(InstanceOf) {
1728 const char* errorMsg = FLAG_harmony_instanceof 1723 const char* errorMsg = FLAG_harmony_instanceof
1729 ? "asm: line 0: do-expression encountered\n" 1724 ? "asm: line 0: do-expression encountered\n"
1730 : "asm: line 39: illegal comparison operator\n"; 1725 : "asm: line 1: illegal comparison operator\n";
1731 1726
1732 CHECK_FUNC_ERROR( 1727 CHECK_FUNC_ERROR(
1733 "function bar() { return (0 instanceof 0)|0; }\n" 1728 "function bar() { return (0 instanceof 0)|0; }\n"
1734 "function foo() { bar(); }", 1729 "function foo() { bar(); }",
1735 errorMsg); 1730 errorMsg);
1736 } 1731 }
1737 1732
1738 1733
1739 TEST(InOperator) { 1734 TEST(InOperator) {
1740 CHECK_FUNC_ERROR( 1735 CHECK_FUNC_ERROR(
1741 "function bar() { return (0 in 0)|0; }\n" 1736 "function bar() { return (0 in 0)|0; }\n"
1742 "function foo() { bar(); }", 1737 "function foo() { bar(); }",
1743 "asm: line 39: illegal comparison operator\n"); 1738 "asm: line 1: illegal comparison operator\n");
1744 } 1739 }
1745 1740
1746 1741
1747 TEST(LogicalAndOperator) { 1742 TEST(LogicalAndOperator) {
1748 CHECK_FUNC_ERROR( 1743 CHECK_FUNC_ERROR(
1749 "function bar() { return (0 && 0)|0; }\n" 1744 "function bar() { return (0 && 0)|0; }\n"
1750 "function foo() { bar(); }", 1745 "function foo() { bar(); }",
1751 "asm: line 39: illegal logical operator\n"); 1746 "asm: line 1: illegal logical operator\n");
1752 } 1747 }
1753 1748
1754 1749
1755 TEST(LogicalOrOperator) { 1750 TEST(LogicalOrOperator) {
1756 CHECK_FUNC_ERROR( 1751 CHECK_FUNC_ERROR(
1757 "function bar() { return (0 || 0)|0; }\n" 1752 "function bar() { return (0 || 0)|0; }\n"
1758 "function foo() { bar(); }", 1753 "function foo() { bar(); }",
1759 "asm: line 39: illegal logical operator\n"); 1754 "asm: line 1: illegal logical operator\n");
1760 } 1755 }
1761 1756
1762 1757
1763 TEST(BadLiteral) { 1758 TEST(BadLiteral) {
1764 CHECK_FUNC_ERROR( 1759 CHECK_FUNC_ERROR(
1765 "function bar() { return true | 0; }\n" 1760 "function bar() { return true | 0; }\n"
1766 "function foo() { bar(); }", 1761 "function foo() { bar(); }",
1767 "asm: line 39: illegal literal\n"); 1762 "asm: line 1: illegal literal\n");
1768 } 1763 }
1769 1764
1770 1765
1771 TEST(MismatchedReturnTypeLiteral) { 1766 TEST(MismatchedReturnTypeLiteral) {
1772 CHECK_FUNC_ERROR( 1767 CHECK_FUNC_ERROR(
1773 "function bar() { if(1) { return 1; } return 1.0; }\n" 1768 "function bar() { if(1) { return 1; } return 1.0; }\n"
1774 "function foo() { bar(); }", 1769 "function foo() { bar(); }",
1775 "asm: line 39: return type does not match function signature\n"); 1770 "asm: line 1: return type does not match function signature\n");
1776 } 1771 }
1777 1772
1778 1773
1779 TEST(MismatchedReturnTypeExpression) { 1774 TEST(MismatchedReturnTypeExpression) {
1780 CHECK_FUNC_ERROR( 1775 CHECK_FUNC_ERROR(
1781 "function bar() {\n" 1776 "function bar() {\n"
1782 " var x = 1; var y = 1.0; if(1) { return x; } return +y; }\n" 1777 " var x = 1; var y = 1.0; if(1) { return x; } return +y; }\n"
1783 "function foo() { bar(); }", 1778 "function foo() { bar(); }",
1784 "asm: line 40: return type does not match function signature\n"); 1779 "asm: line 2: return type does not match function signature\n");
1785 } 1780 }
1786 1781
1787 1782
1788 TEST(AssignToFloatishToF64) { 1783 TEST(AssignToFloatishToF64) {
1789 CHECK_FUNC_ERROR( 1784 CHECK_FUNC_ERROR(
1790 "function bar() { var v = fround(1.0); f64[0] = v + fround(1.0); }\n" 1785 "function bar() { var v = fround(1.0); f64[0] = v + fround(1.0); }\n"
1791 "function foo() { bar(); }", 1786 "function foo() { bar(); }",
1792 "asm: line 39: floatish assignment to double array\n"); 1787 "asm: line 1: floatish assignment to double array\n");
1793 } 1788 }
1794 1789
1795 1790
1796 TEST(ForeignFunction) { 1791 TEST(ForeignFunction) {
1797 CHECK_FUNC_TYPES_BEGIN( 1792 CHECK_FUNC_TYPES_BEGIN(
1798 "var baz = foreign.baz;\n" 1793 "var baz = foreign.baz;\n"
1799 "function bar() { return baz(1, 2)|0; }\n" 1794 "function bar() { return baz(1, 2)|0; }\n"
1800 "function foo() { bar(); }") { 1795 "function foo() { bar(); }") {
1801 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) { 1796 CHECK_EXPR(FunctionLiteral, FUNC_I_TYPE) {
1802 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) { 1797 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmSigned)) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1851 TEST(BadExports) { 1846 TEST(BadExports) {
1852 HARNESS_PREAMBLE() 1847 HARNESS_PREAMBLE()
1853 "function foo() {};\n" 1848 "function foo() {};\n"
1854 "return {foo: foo, bar: 1};" 1849 "return {foo: foo, bar: 1};"
1855 "}\n"; 1850 "}\n";
1856 1851
1857 v8::V8::Initialize(); 1852 v8::V8::Initialize();
1858 HandleAndZoneScope handles; 1853 HandleAndZoneScope handles;
1859 Zone* zone = handles.main_zone(); 1854 Zone* zone = handles.main_zone();
1860 ZoneVector<ExpressionTypeEntry> types(zone); 1855 ZoneVector<ExpressionTypeEntry> types(zone);
1861 CHECK_EQ("asm: line 40: non-function in function table\n", 1856 CHECK_EQ("asm: line 2: non-function in function table\n",
1862 Validate(zone, test_function, &types)); 1857 Validate(zone, test_function, &types));
1863 } 1858 }
1864 1859
1865 1860
1866 TEST(NestedHeapAssignment) { 1861 TEST(NestedHeapAssignment) {
1867 CHECK_FUNC_ERROR( 1862 CHECK_FUNC_ERROR(
1868 "function bar() { var x = 0; i16[x = 1] = 2; }\n" 1863 "function bar() { var x = 0; i16[x = 1] = 2; }\n"
1869 "function foo() { bar(); }", 1864 "function foo() { bar(); }",
1870 "asm: line 39: expected >> in heap access\n"); 1865 "asm: line 1: expected >> in heap access\n");
1871 } 1866 }
1872 1867
1873 TEST(BadOperatorHeapAssignment) { 1868 TEST(BadOperatorHeapAssignment) {
1874 CHECK_FUNC_ERROR( 1869 CHECK_FUNC_ERROR(
1875 "function bar() { var x = 0; i16[x & 1] = 2; }\n" 1870 "function bar() { var x = 0; i16[x & 1] = 2; }\n"
1876 "function foo() { bar(); }", 1871 "function foo() { bar(); }",
1877 "asm: line 39: expected >> in heap access\n"); 1872 "asm: line 1: expected >> in heap access\n");
1878 } 1873 }
1879 1874
1880 1875
1881 TEST(BadArrayAssignment) { 1876 TEST(BadArrayAssignment) {
1882 CHECK_FUNC_ERROR( 1877 CHECK_FUNC_ERROR(
1883 "function bar() { i8[0] = 0.0; }\n" 1878 "function bar() { i8[0] = 0.0; }\n"
1884 "function foo() { bar(); }", 1879 "function foo() { bar(); }",
1885 "asm: line 39: illegal type in assignment\n"); 1880 "asm: line 1: illegal type in assignment\n");
1886 } 1881 }
1887 1882
1888 1883
1889 TEST(BadStandardFunctionCallOutside) { 1884 TEST(BadStandardFunctionCallOutside) {
1890 CHECK_FUNC_ERROR( 1885 CHECK_FUNC_ERROR(
1891 "var s0 = sin(0);\n" 1886 "var s0 = sin(0);\n"
1892 "function bar() { }\n" 1887 "function bar() { }\n"
1893 "function foo() { bar(); }", 1888 "function foo() { bar(); }",
1894 "asm: line 39: illegal variable reference in module body\n"); 1889 "asm: line 1: illegal variable reference in module body\n");
1895 } 1890 }
1896 1891
1897 1892
1898 TEST(BadFunctionCallOutside) { 1893 TEST(BadFunctionCallOutside) {
1899 CHECK_FUNC_ERROR( 1894 CHECK_FUNC_ERROR(
1900 "function bar() { return 0.0; }\n" 1895 "function bar() { return 0.0; }\n"
1901 "var s0 = bar(0);\n" 1896 "var s0 = bar(0);\n"
1902 "function foo() { bar(); }", 1897 "function foo() { bar(); }",
1903 "asm: line 40: illegal variable reference in module body\n"); 1898 "asm: line 2: illegal variable reference in module body\n");
1904 } 1899 }
1905 1900
1906 1901
1907 TEST(NestedVariableAssignment) { 1902 TEST(NestedVariableAssignment) {
1908 CHECK_FUNC_TYPES_BEGIN( 1903 CHECK_FUNC_TYPES_BEGIN(
1909 "function bar() { var x = 0; x = x = 4; }\n" 1904 "function bar() { var x = 0; x = x = 4; }\n"
1910 "function foo() { bar(); }") { 1905 "function foo() { bar(); }") {
1911 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) { 1906 CHECK_EXPR(FunctionLiteral, FUNC_V_TYPE) {
1912 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) { 1907 CHECK_EXPR(Assignment, Bounds(cache.kAsmInt)) {
1913 CHECK_VAR(x, Bounds(cache.kAsmInt)); 1908 CHECK_VAR(x, Bounds(cache.kAsmInt));
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
2152 CHECK_SKIP(); 2147 CHECK_SKIP();
2153 } 2148 }
2154 CHECK_FUNC_TYPES_END 2149 CHECK_FUNC_TYPES_END
2155 } 2150 }
2156 2151
2157 2152
2158 TEST(BadSwitchRange) { 2153 TEST(BadSwitchRange) {
2159 CHECK_FUNC_ERROR( 2154 CHECK_FUNC_ERROR(
2160 "function bar() { switch (1) { case -1: case 0x7fffffff: } }\n" 2155 "function bar() { switch (1) { case -1: case 0x7fffffff: } }\n"
2161 "function foo() { bar(); }", 2156 "function foo() { bar(); }",
2162 "asm: line 39: case range too large\n"); 2157 "asm: line 1: case range too large\n");
2163 } 2158 }
2164 2159
2165 2160
2166 TEST(DuplicateSwitchCase) { 2161 TEST(DuplicateSwitchCase) {
2167 CHECK_FUNC_ERROR( 2162 CHECK_FUNC_ERROR(
2168 "function bar() { switch (1) { case 0: case 0: } }\n" 2163 "function bar() { switch (1) { case 0: case 0: } }\n"
2169 "function foo() { bar(); }", 2164 "function foo() { bar(); }",
2170 "asm: line 39: duplicate case value\n"); 2165 "asm: line 1: duplicate case value\n");
2171 } 2166 }
2172 2167
2173 2168
2174 TEST(BadSwitchOrder) { 2169 TEST(BadSwitchOrder) {
2175 CHECK_FUNC_ERROR( 2170 CHECK_FUNC_ERROR(
2176 "function bar() { switch (1) { default: case 0: } }\n" 2171 "function bar() { switch (1) { default: case 0: } }\n"
2177 "function foo() { bar(); }", 2172 "function foo() { bar(); }",
2178 "asm: line 39: default case out of order\n"); 2173 "asm: line 1: default case out of order\n");
2179 } 2174 }
2180 2175
2181 TEST(BadForeignCall) { 2176 TEST(BadForeignCall) {
2182 const char test_function[] = 2177 const char test_function[] =
2183 "function TestModule(stdlib, foreign, buffer) {\n" 2178 "function TestModule(stdlib, foreign, buffer) {\n"
2184 " \"use asm\";\n" 2179 " \"use asm\";\n"
2185 " var ffunc = foreign.foo;\n" 2180 " var ffunc = foreign.foo;\n"
2186 " function test1() { var x = 0; ffunc(x); }\n" 2181 " function test1() { var x = 0; ffunc(x); }\n"
2187 " return { testFunc1: test1 };\n" 2182 " return { testFunc1: test1 };\n"
2188 "}\n"; 2183 "}\n";
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
2409 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmDouble)) { 2404 CHECK_EXPR(BinaryOperation, Bounds(cache.kAsmDouble)) {
2410 CHECK_VAR(x, Bounds(cache.kAsmDouble)); 2405 CHECK_VAR(x, Bounds(cache.kAsmDouble));
2411 CHECK_EXPR(Literal, Bounds(cache.kAsmDouble)); 2406 CHECK_EXPR(Literal, Bounds(cache.kAsmDouble));
2412 } 2407 }
2413 } 2408 }
2414 } 2409 }
2415 CHECK_SKIP(); 2410 CHECK_SKIP();
2416 } 2411 }
2417 CHECK_FUNC_TYPES_END 2412 CHECK_FUNC_TYPES_END
2418 } 2413 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698