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

Side by Side Diff: lib/src/codegen/html_codegen.dart

Issue 988483006: Add widget to display errors, and report dependency_graph errors correctly (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 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
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 library dev_compiler.src.codegen.html_codegen; 5 library dev_compiler.src.codegen.html_codegen;
6 6
7 import 'package:html5lib/dom.dart'; 7 import 'package:html5lib/dom.dart';
8 import 'package:html5lib/parser.dart' show parseFragment; 8 import 'package:html5lib/parser.dart' show parseFragment;
9 import 'package:logging/logging.dart' show Logger; 9 import 'package:logging/logging.dart' show Logger;
10 10
(...skipping 29 matching lines...) Expand all
40 }); 40 });
41 41
42 if (options.outputDart) return '${document.outerHtml}\n'; 42 if (options.outputDart) return '${document.outerHtml}\n';
43 43
44 var libraries = []; 44 var libraries = [];
45 visitInPostOrder(root, (n) { 45 visitInPostOrder(root, (n) {
46 if (n is DartSourceNode) libraries.add(n); 46 if (n is DartSourceNode) libraries.add(n);
47 }, includeParts: false); 47 }, includeParts: false);
48 48
49 String mainLibraryName; 49 String mainLibraryName;
50 var fragment = _loadRuntimeScripts(); 50 var fragment = _loadRuntimeScripts(options);
51 if (!options.checkSdk) fragment.nodes.add(_miniMockSdk); 51 if (!options.checkSdk) fragment.nodes.add(_miniMockSdk);
52 for (var lib in libraries) { 52 for (var lib in libraries) {
53 var info = lib.info; 53 var info = lib.info;
54 if (info == null) continue; 54 if (info == null) continue;
55 if (info.isEntry) mainLibraryName = jsLibraryName(info.library); 55 if (info.isEntry) mainLibraryName = jsLibraryName(info.library);
56 fragment.nodes.add(_libraryInclude(jsOutputPath(info, root.uri))); 56 fragment.nodes.add(_libraryInclude(jsOutputPath(info, root.uri)));
57 } 57 }
58 fragment.nodes.add(_invokeMain(mainLibraryName)); 58 fragment.nodes.add(_invokeMain(mainLibraryName));
59 scripts[0].replaceWith(fragment); 59 scripts[0].replaceWith(fragment);
60 return '${document.outerHtml}\n'; 60 return '${document.outerHtml}\n';
61 } 61 }
62 62
63 /// A document fragment with scripts that check for harmony features and that 63 /// A document fragment with scripts that check for harmony features and that
64 /// inject our runtime. 64 /// inject our runtime.
65 Node _loadRuntimeScripts() => parseFragment(''' 65 Node _loadRuntimeScripts(options) {
66 <script src="dev_compiler/runtime/harmony_feature_check.js"></script> 66 // TODO(sigmund): use dev_compiler to generate messages_widget in the future.
67 <script src="dev_compiler/runtime/dart_runtime.js"></script> 67 var widgetCode = options.serverMode
68 '''); 68 ? '<script src="dev_compiler/runtime/messages_widget.js"></script>\n'
69 '<link rel="stylesheet" href="dev_compiler/runtime/messages.css">'
70 : '';
71 return parseFragment(
72 '<script src="dev_compiler/runtime/harmony_feature_check.js"></script>\n'
73 '<script src="dev_compiler/runtime/dart_runtime.js"></script>\n'
74 '$widgetCode');
75 }
69 76
70 /// A script tag that loads the .js code for a compiled library. 77 /// A script tag that loads the .js code for a compiled library.
71 Node _libraryInclude(String jsUrl) => 78 Node _libraryInclude(String jsUrl) =>
72 parseFragment('<script src="$jsUrl"></script>\n'); 79 parseFragment('<script src="$jsUrl"></script>\n');
73 80
74 /// A script tag that invokes the main function on the entry point library. 81 /// A script tag that invokes the main function on the entry point library.
75 Node _invokeMain(String mainLibraryName) => 82 Node _invokeMain(String mainLibraryName) {
76 parseFragment('<script>$mainLibraryName.main();</script>\n'); 83 var code = mainLibraryName == null
84 ? 'console.error("dev_compiler error: main was not generated");'
85 : '$mainLibraryName.main();';
86 return parseFragment('<script>$code</script>\n');
87 }
77 88
78 /// A script tag with a tiny mock of the core SDK. This is just used for testing 89 /// A script tag with a tiny mock of the core SDK. This is just used for testing
79 /// some small samples. 90 /// some small samples.
80 // TODO(sigmund,jmesserly): remove. 91 // TODO(sigmund,jmesserly): remove.
81 Node get _miniMockSdk => parseFragment(''' 92 Node get _miniMockSdk => parseFragment('''
82 <script> 93 <script>
83 /* placehorder for unimplemented code libraries */ 94 /* placehorder for unimplemented code libraries */
84 var math = Math; 95 var math = Math;
85 var core = { int: { parse: Number }, print: e => console.log(e) }; 96 var core = { int: { parse: Number }, print: e => console.log(e) };
86 var dom = { document: document }; 97 var dom = { document: document };
87 </script>'''); 98 </script>''');
88 final _log = new Logger('dev_compiler.src.codegen.html_codegen'); 99 final _log = new Logger('dev_compiler.src.codegen.html_codegen');
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698