| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 3228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3239 DCHECK(s != script_scope); | 3239 DCHECK(s != script_scope); |
| 3240 const i::AstRawString* name_x = avf.GetOneByteString("x"); | 3240 const i::AstRawString* name_x = avf.GetOneByteString("x"); |
| 3241 | 3241 |
| 3242 // Get result from f's function context (that is g's outer context) | 3242 // Get result from f's function context (that is g's outer context) |
| 3243 i::Variable* var_x = s->Lookup(name_x); | 3243 i::Variable* var_x = s->Lookup(name_x); |
| 3244 CHECK(var_x != NULL); | 3244 CHECK(var_x != NULL); |
| 3245 CHECK(var_x->maybe_assigned() == i::kMaybeAssigned); | 3245 CHECK(var_x->maybe_assigned() == i::kMaybeAssigned); |
| 3246 } | 3246 } |
| 3247 | 3247 |
| 3248 | 3248 |
| 3249 TEST(ExportsMaybeAssigned) { | |
| 3250 i::FLAG_use_strict = true; | |
| 3251 i::FLAG_harmony_scoping = true; | |
| 3252 i::FLAG_harmony_modules = true; | |
| 3253 | |
| 3254 i::Isolate* isolate = CcTest::i_isolate(); | |
| 3255 i::Factory* factory = isolate->factory(); | |
| 3256 i::HandleScope scope(isolate); | |
| 3257 LocalContext env; | |
| 3258 | |
| 3259 const char* src = | |
| 3260 "module A {" | |
| 3261 " export var x = 1;" | |
| 3262 " export function f() { return x };" | |
| 3263 " export const y = 2;" | |
| 3264 " module B {}" | |
| 3265 " export module C {}" | |
| 3266 "};" | |
| 3267 "A.f"; | |
| 3268 | |
| 3269 i::ScopedVector<char> program(Utf8LengthHelper(src) + 1); | |
| 3270 i::SNPrintF(program, "%s", src); | |
| 3271 i::Handle<i::String> source = factory->InternalizeUtf8String(program.start()); | |
| 3272 source->PrintOn(stdout); | |
| 3273 printf("\n"); | |
| 3274 i::Zone zone; | |
| 3275 v8::Local<v8::Value> v = CompileRun(src); | |
| 3276 i::Handle<i::Object> o = v8::Utils::OpenHandle(*v); | |
| 3277 i::Handle<i::JSFunction> f = i::Handle<i::JSFunction>::cast(o); | |
| 3278 i::Context* context = f->context(); | |
| 3279 i::AstValueFactory avf(&zone, isolate->heap()->HashSeed()); | |
| 3280 avf.Internalize(isolate); | |
| 3281 | |
| 3282 i::Scope* script_scope = | |
| 3283 new (&zone) i::Scope(&zone, NULL, i::SCRIPT_SCOPE, &avf); | |
| 3284 script_scope->Initialize(); | |
| 3285 i::Scope* s = | |
| 3286 i::Scope::DeserializeScopeChain(isolate, &zone, context, script_scope); | |
| 3287 DCHECK(s != script_scope); | |
| 3288 const i::AstRawString* name_x = avf.GetOneByteString("x"); | |
| 3289 const i::AstRawString* name_f = avf.GetOneByteString("f"); | |
| 3290 const i::AstRawString* name_y = avf.GetOneByteString("y"); | |
| 3291 const i::AstRawString* name_B = avf.GetOneByteString("B"); | |
| 3292 const i::AstRawString* name_C = avf.GetOneByteString("C"); | |
| 3293 | |
| 3294 // Get result from h's function context (that is f's context) | |
| 3295 i::Variable* var_x = s->Lookup(name_x); | |
| 3296 CHECK(var_x != NULL); | |
| 3297 CHECK(var_x->maybe_assigned() == i::kMaybeAssigned); | |
| 3298 i::Variable* var_f = s->Lookup(name_f); | |
| 3299 CHECK(var_f != NULL); | |
| 3300 CHECK(var_f->maybe_assigned() == i::kMaybeAssigned); | |
| 3301 i::Variable* var_y = s->Lookup(name_y); | |
| 3302 CHECK(var_y != NULL); | |
| 3303 CHECK(var_y->maybe_assigned() == i::kNotAssigned); | |
| 3304 i::Variable* var_B = s->Lookup(name_B); | |
| 3305 CHECK(var_B != NULL); | |
| 3306 CHECK(var_B->maybe_assigned() == i::kNotAssigned); | |
| 3307 i::Variable* var_C = s->Lookup(name_C); | |
| 3308 CHECK(var_C != NULL); | |
| 3309 CHECK(var_C->maybe_assigned() == i::kNotAssigned); | |
| 3310 } | |
| 3311 | |
| 3312 | |
| 3313 TEST(InnerAssignment) { | 3249 TEST(InnerAssignment) { |
| 3314 i::Isolate* isolate = CcTest::i_isolate(); | 3250 i::Isolate* isolate = CcTest::i_isolate(); |
| 3315 i::Factory* factory = isolate->factory(); | 3251 i::Factory* factory = isolate->factory(); |
| 3316 i::HandleScope scope(isolate); | 3252 i::HandleScope scope(isolate); |
| 3317 LocalContext env; | 3253 LocalContext env; |
| 3318 | 3254 |
| 3319 const char* prefix = "function f() {"; | 3255 const char* prefix = "function f() {"; |
| 3320 const char* midfix = " function g() {"; | 3256 const char* midfix = " function g() {"; |
| 3321 const char* suffix = "}}"; | 3257 const char* suffix = "}}"; |
| 3322 struct { const char* source; bool assigned; bool strict; } outers[] = { | 3258 struct { const char* source; bool assigned; bool strict; } outers[] = { |
| (...skipping 1778 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5101 "export default 42", | 5037 "export default 42", |
| 5102 "var x; export default x = 7", | 5038 "var x; export default x = 7", |
| 5103 "export { Q } from 'somemodule.js';", | 5039 "export { Q } from 'somemodule.js';", |
| 5104 "export * from 'somemodule.js';", | 5040 "export * from 'somemodule.js';", |
| 5105 "var foo; export { foo as for };", | 5041 "var foo; export { foo as for };", |
| 5106 "export { arguments } from 'm.js';", | 5042 "export { arguments } from 'm.js';", |
| 5107 "export { for } from 'm.js';", | 5043 "export { for } from 'm.js';", |
| 5108 "export { yield } from 'm.js'", | 5044 "export { yield } from 'm.js'", |
| 5109 "export { static } from 'm.js'", | 5045 "export { static } from 'm.js'", |
| 5110 "export { let } from 'm.js'", | 5046 "export { let } from 'm.js'", |
| 5047 "var a; export { a as b, a as c };", |
| 5111 | 5048 |
| 5112 "import 'somemodule.js';", | 5049 "import 'somemodule.js';", |
| 5113 "import { } from 'm.js';", | 5050 "import { } from 'm.js';", |
| 5114 "import { a } from 'm.js';", | 5051 "import { a } from 'm.js';", |
| 5115 "import { a, b as d, c, } from 'm.js';", | 5052 "import { a, b as d, c, } from 'm.js';", |
| 5116 "import * as thing from 'm.js';", | 5053 "import * as thing from 'm.js';", |
| 5117 "import thing from 'm.js';", | 5054 "import thing from 'm.js';", |
| 5118 "import thing, * as rest from 'm.js';", | 5055 "import thing, * as rest from 'm.js';", |
| 5119 "import thing, { a, b, c } from 'm.js';", | 5056 "import thing, { a, b, c } from 'm.js';", |
| 5120 "import { arguments as a } from 'm.js';", | 5057 "import { arguments as a } from 'm.js';", |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5204 "export default const x = 7;", | 5141 "export default const x = 7;", |
| 5205 "export *;", | 5142 "export *;", |
| 5206 "export * from;", | 5143 "export * from;", |
| 5207 "export { Q } from;", | 5144 "export { Q } from;", |
| 5208 "export default from 'module.js';", | 5145 "export default from 'module.js';", |
| 5209 "export { for }", | 5146 "export { for }", |
| 5210 "export { for as foo }", | 5147 "export { for as foo }", |
| 5211 "export { arguments }", | 5148 "export { arguments }", |
| 5212 "export { arguments as foo }", | 5149 "export { arguments as foo }", |
| 5213 "var a; export { a, a };", | 5150 "var a; export { a, a };", |
| 5151 "var a, b; export { a as b, b };", |
| 5152 "var a, b; export { a as c, b as c };", |
| 5153 "export default function f(){}; export default class C {};", |
| 5154 "export default function f(){}; var a; export { a as default };", |
| 5214 | 5155 |
| 5215 "import from;", | 5156 "import from;", |
| 5216 "import from 'm.js';", | 5157 "import from 'm.js';", |
| 5217 "import { };", | 5158 "import { };", |
| 5218 "import {;", | 5159 "import {;", |
| 5219 "import };", | 5160 "import };", |
| 5220 "import { , };", | 5161 "import { , };", |
| 5221 "import { , } from 'm.js';", | 5162 "import { , } from 'm.js';", |
| 5222 "import { a } from;", | 5163 "import { a } from;", |
| 5223 "import { a } 'm.js';", | 5164 "import { a } 'm.js';", |
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5541 static const ParserFlag always_flags[] = { | 5482 static const ParserFlag always_flags[] = { |
| 5542 kAllowStrongMode, kAllowHarmonyScoping | 5483 kAllowStrongMode, kAllowHarmonyScoping |
| 5543 }; | 5484 }; |
| 5544 RunParserSyncTest(sloppy_context_data, data, kSuccess, NULL, 0, always_flags, | 5485 RunParserSyncTest(sloppy_context_data, data, kSuccess, NULL, 0, always_flags, |
| 5545 arraysize(always_flags)); | 5486 arraysize(always_flags)); |
| 5546 RunParserSyncTest(strict_context_data, data, kSuccess, NULL, 0, always_flags, | 5487 RunParserSyncTest(strict_context_data, data, kSuccess, NULL, 0, always_flags, |
| 5547 arraysize(always_flags)); | 5488 arraysize(always_flags)); |
| 5548 RunParserSyncTest(strong_context_data, data, kError, NULL, 0, always_flags, | 5489 RunParserSyncTest(strong_context_data, data, kError, NULL, 0, always_flags, |
| 5549 arraysize(always_flags)); | 5490 arraysize(always_flags)); |
| 5550 } | 5491 } |
| OLD | NEW |