Chromium Code Reviews

Side by Side Diff: runtime/vm/dart_api_impl_test.cc

Issue 23982002: Fix bug where Script files that only contained patches were lost from the list of LoadedScripts() T… (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: removed dupe code Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | | Annotate | Revision Log
« no previous file with comments | « no previous file | runtime/vm/object.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "bin/builtin.h" 5 #include "bin/builtin.h"
6 #include "include/dart_api.h" 6 #include "include/dart_api.h"
7 #include "include/dart_mirrors_api.h" 7 #include "include/dart_mirrors_api.h"
8 #include "include/dart_native_api.h" 8 #include "include/dart_native_api.h"
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 #include "platform/json.h" 10 #include "platform/json.h"
(...skipping 5278 matching lines...)
5289 " var _f;\n" 5289 " var _f;\n"
5290 " callFunc(x, y) => x(y);\n" 5290 " callFunc(x, y) => x(y);\n"
5291 " external void method(var value);\n" 5291 " external void method(var value);\n"
5292 " get field => _field;\n" 5292 " get field => _field;\n"
5293 "}\n" 5293 "}\n"
5294 "class B {\n" 5294 "class B {\n"
5295 " var val;\n" 5295 " var val;\n"
5296 " external B.named(x);\n" 5296 " external B.named(x);\n"
5297 " external B(v);\n" 5297 " external B(v);\n"
5298 "}\n" 5298 "}\n"
5299 "class C {\n"
5300 " external int method();\n"
5301 "}\n"
5302 "\n"
5299 "external int unpatched();\n" 5303 "external int unpatched();\n"
5300 "external int topLevel(var value);\n" 5304 "external int topLevel(var value);\n"
5305 "external int topLevel2(var value);\n"
5301 "external int get topLevelGetter;\n" 5306 "external int get topLevelGetter;\n"
5302 "external void set topLevelSetter(int value);\n"; 5307 "external void set topLevelSetter(int value);\n";
5303 5308
5304 const char* kPatchChars = 5309 const char* kPatchChars =
5305 "patch class A {\n" 5310 "patch class A {\n"
5306 " var _g;\n" 5311 " var _g;\n"
5307 " A() : fvalue = 13;\n" 5312 " A() : fvalue = 13;\n"
5308 " get _field => _g;\n" 5313 " get _field => _g;\n"
5309 " /*patch*/ void method(var value) {\n" 5314 " /*patch*/ void method(var value) {\n"
5310 " int closeYourEyes(var eggs) { return eggs * -1; }\n" 5315 " int closeYourEyes(var eggs) { return eggs * -1; }\n"
5311 " value = callFunc(closeYourEyes, value);\n" 5316 " value = callFunc(closeYourEyes, value);\n"
5312 " _g = value * 5;\n" 5317 " _g = value * 5;\n"
5313 " }\n" 5318 " }\n"
5314 "}\n" 5319 "}\n"
5315 "patch class B {\n" 5320 "patch class B {\n"
5316 " B._internal(x) : val = x;\n" 5321 " B._internal(x) : val = x;\n"
5317 " /*patch*/ factory B.named(x) { return new B._internal(x); }\n" 5322 " /*patch*/ factory B.named(x) { return new B._internal(x); }\n"
5318 " /*patch*/ factory B(v) native \"const_B_factory\";\n" 5323 " /*patch*/ factory B(v) native \"const_B_factory\";\n"
5319 "}\n" 5324 "}\n"
5320 "var _topLevelValue = -1;\n" 5325 "var _topLevelValue = -1;\n"
5321 "patch int topLevel(var value) => value * value;\n" 5326 "patch int topLevel(var value) => value * value;\n"
5322 "patch int set topLevelSetter(value) { _topLevelValue = value; }\n" 5327 "patch int set topLevelSetter(value) { _topLevelValue = value; }\n"
5323 "patch int get topLevelGetter => 2 * _topLevelValue;\n" 5328 "patch int get topLevelGetter => 2 * _topLevelValue;\n"
5324 // Allow top level methods named patch. 5329 // Allow top level methods named patch.
5325 "patch(x) => x*3;\n"; 5330 "patch(x) => x*3;\n"
5331 ; // NOLINT
5332
5333 const char* kPatchClassOnlyChars =
5334 "patch class C {\n"
5335 " /*patch*/ int method() {\n"
5336 " return 42;\n"
5337 " }\n"
5338 "}\n"
5339 ; // NOLINT
5340
5341 const char* kPatchNoClassChars =
5342 "patch topLevel2(x) => x * 2;\n";
5326 5343
5327 const char* kScriptChars = 5344 const char* kScriptChars =
5328 "import 'theLibrary';\n" 5345 "import 'theLibrary';\n"
5329 "e1() => unpatched();\n" 5346 "e1() => unpatched();\n"
5330 "m1() => topLevel(2);\n" 5347 "m1() => topLevel(2);\n"
5331 "m2() {\n" 5348 "m2() {\n"
5332 " topLevelSetter = 20;\n" 5349 " topLevelSetter = 20;\n"
5333 " return topLevelGetter;\n" 5350 " return topLevelGetter;\n"
5334 "}\n" 5351 "}\n"
5335 "m3() => patch(7);\n" 5352 "m3() => patch(7);\n"
(...skipping 13 matching lines...)
5349 bin::Builtin::SetNativeResolver(bin::Builtin::kIOLibrary); 5366 bin::Builtin::SetNativeResolver(bin::Builtin::kIOLibrary);
5350 5367
5351 Dart_Handle result = Dart_SetLibraryTagHandler(library_handler); 5368 Dart_Handle result = Dart_SetLibraryTagHandler(library_handler);
5352 EXPECT_VALID(result); 5369 EXPECT_VALID(result);
5353 5370
5354 Dart_Handle url = NewString("theLibrary"); 5371 Dart_Handle url = NewString("theLibrary");
5355 Dart_Handle source = NewString(kLibraryChars); 5372 Dart_Handle source = NewString(kLibraryChars);
5356 result = Dart_LoadLibrary(url, source); 5373 result = Dart_LoadLibrary(url, source);
5357 EXPECT_VALID(result); 5374 EXPECT_VALID(result);
5358 5375
5359 const String& patch_url = String::Handle(String::New("theLibrary patch")); 5376 const char* patchNames[] = { "main library patch",
5360 const String& patch_source = String::Handle(String::New(kPatchChars)); 5377 "patch class only",
5361 const Script& patch_script = Script::Handle(Script::New( 5378 "patch no class" };
5362 patch_url, patch_source, RawScript::kPatchTag)); 5379 const char* patches[] = { kPatchChars,
5380 kPatchClassOnlyChars,
5381 kPatchNoClassChars };
5382 const String& lib_url = String::Handle(String::New("theLibrary"));
5363 5383
5364 const String& lib_url = String::Handle(String::New("theLibrary"));
5365 const Library& lib = Library::Handle(Library::LookupLibrary(lib_url)); 5384 const Library& lib = Library::Handle(Library::LookupLibrary(lib_url));
5366 const Error& err = Error::Handle(lib.Patch(patch_script)); 5385
5367 if (!err.IsNull()) { 5386 for (int i = 0; i < 3; i++) {
5368 OS::Print("Patching error: %s\n", err.ToErrorCString()); 5387 const String& patch_url = String::Handle(String::New(patchNames[i]));
5369 EXPECT(false); 5388 const String& patch_source = String::Handle(String::New(patches[i]));
5389 const Script& patch_script = Script::Handle(Script::New(
5390 patch_url, patch_source, RawScript::kPatchTag));
5391
5392 const Error& err = Error::Handle(lib.Patch(patch_script));
5393 if (!err.IsNull()) {
5394 OS::Print("Patching error: %s\n", err.ToErrorCString());
5395 EXPECT(false);
5396 }
5370 } 5397 }
5371 result = Dart_SetNativeResolver(result, &PatchNativeResolver); 5398 result = Dart_SetNativeResolver(result, &PatchNativeResolver);
5372 EXPECT_VALID(result); 5399 EXPECT_VALID(result);
5373 5400
5374 Dart_Handle script_url = NewString("theScript"); 5401 Dart_Handle script_url = NewString("theScript");
5375 source = NewString(kScriptChars); 5402 source = NewString(kScriptChars);
5376 Dart_Handle test_script = Dart_LoadScript(script_url, source, 0, 0); 5403 Dart_Handle test_script = Dart_LoadScript(script_url, source, 0, 0);
5377 EXPECT_VALID(test_script); 5404 EXPECT_VALID(test_script);
5378 5405
5379 // Make sure that we can compile all of the patched code. 5406 // Make sure that we can compile all of the patched code.
(...skipping 34 matching lines...)
5414 result = Dart_Invoke(test_script, NewString("m5"), 0, NULL); 5441 result = Dart_Invoke(test_script, NewString("m5"), 0, NULL);
5415 EXPECT_VALID(result); 5442 EXPECT_VALID(result);
5416 EXPECT(Dart_IsNull(result)); 5443 EXPECT(Dart_IsNull(result));
5417 5444
5418 value = 0; 5445 value = 0;
5419 result = Dart_Invoke(test_script, NewString("m6"), 0, NULL); 5446 result = Dart_Invoke(test_script, NewString("m6"), 0, NULL);
5420 EXPECT_VALID(result); 5447 EXPECT_VALID(result);
5421 EXPECT(Dart_IsInteger(result)); 5448 EXPECT(Dart_IsInteger(result));
5422 EXPECT_VALID(Dart_IntegerToInt64(result, &value)); 5449 EXPECT_VALID(Dart_IntegerToInt64(result, &value));
5423 EXPECT_EQ(8, value); 5450 EXPECT_EQ(8, value);
5451
5452 // Make sure all source files show up in the patched library.
5453 const Array& lib_scripts = Array::Handle(lib.LoadedScripts());
5454 EXPECT_EQ(4, lib_scripts.Length());
5424 } 5455 }
5425 5456
5426 5457
5427 static void MyNativeFunction1(Dart_NativeArguments args) { 5458 static void MyNativeFunction1(Dart_NativeArguments args) {
5428 Dart_EnterScope(); 5459 Dart_EnterScope();
5429 Dart_SetReturnValue(args, Dart_NewInteger(654321)); 5460 Dart_SetReturnValue(args, Dart_NewInteger(654321));
5430 Dart_ExitScope(); 5461 Dart_ExitScope();
5431 } 5462 }
5432 5463
5433 5464
(...skipping 1852 matching lines...)
7286 NewString("main"), 7317 NewString("main"),
7287 0, 7318 0,
7288 NULL); 7319 NULL);
7289 int64_t value = 0; 7320 int64_t value = 0;
7290 result = Dart_IntegerToInt64(result, &value); 7321 result = Dart_IntegerToInt64(result, &value);
7291 EXPECT_VALID(result); 7322 EXPECT_VALID(result);
7292 EXPECT_EQ(8, value); 7323 EXPECT_EQ(8, value);
7293 } 7324 }
7294 7325
7295 } // namespace dart 7326 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine