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

Unified Diff: lib/compiler/implementation/js_backend/native_emitter.dart

Issue 11188004: Add a content-security-policy (CSP) flag. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Split CSP code into separate class. Created 8 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: lib/compiler/implementation/js_backend/native_emitter.dart
diff --git a/lib/compiler/implementation/js_backend/native_emitter.dart b/lib/compiler/implementation/js_backend/native_emitter.dart
index 4747a6e12af203703bd04f5b1b6abf4636328254..d66a30eda4c258db18e0259d8aa7d74e44f62386 100644
--- a/lib/compiler/implementation/js_backend/native_emitter.dart
+++ b/lib/compiler/implementation/js_backend/native_emitter.dart
@@ -95,13 +95,19 @@ class NativeEmitter {
String get defineNativeClassFunction {
return """
-function(cls, fields, methods) {
+function(cls, desc) {
+ var fields = desc[''] || [];
var generateGetterSetter = ${emitter.generateGetterSetterFunction};
for (var i = 0; i < fields.length; i++) {
- generateGetterSetter(fields[i], methods);
+ generateGetterSetter(fields[i], desc);
}
- for (var method in methods) {
- $dynamicName(method)[cls] = methods[method];
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
+ for (var method in desc) {
+ if (method !== '') {
+ if (hasOwnProperty.call(desc, method)) {
+ $dynamicName(method)[cls] = desc[method];
+ }
+ }
}
}""";
}
@@ -157,23 +163,39 @@ function(cls, fields, methods) {
}
CodeBuffer fieldBuffer = new CodeBuffer();
- List<String> checkedSetters =
- emitter.emitClassFields(classElement, fieldBuffer);
+ CodeBuffer getterSetterBuffer = new CodeBuffer();
+
+ emitter.emitClassFields(classElement, fieldBuffer);
+ emitter.emitClassGettersSetters(classElement, getterSetterBuffer,
+ omitLeadingComma: true);
CodeBuffer methodBuffer = new CodeBuffer();
emitter.emitInstanceMembers(classElement, methodBuffer, false);
- if (methodBuffer.isEmpty() && fieldBuffer.isEmpty()) return;
+ if (methodBuffer.isEmpty()
+ && fieldBuffer.isEmpty()
+ && getterSetterBuffer.isEmpty()) {
+ return;
+ }
String nativeName = toNativeName(classElement);
- nativeBuffer.add("$defineNativeClassName('$nativeName', [");
- nativeBuffer.add(fieldBuffer);
- nativeBuffer.add('], {');
- if (!checkedSetters.isEmpty()) {
- nativeBuffer.add('${Strings.join(checkedSetters, ",\n")}');
- nativeBuffer.add(',\n');
+ nativeBuffer.add("$defineNativeClassName('$nativeName', ");
+ nativeBuffer.add('{');
+ bool firstInMap = true;
+ if (!fieldBuffer.isEmpty()) {
+ firstInMap = false;
+ nativeBuffer.add(fieldBuffer);
+ }
+ if (!getterSetterBuffer.isEmpty()) {
+ if (!firstInMap) nativeBuffer.add(",");
+ firstInMap = false;
+ nativeBuffer.add("\n ");
+ nativeBuffer.add(getterSetterBuffer);
+ }
+ if (!methodBuffer.isEmpty()) {
+ if (!firstInMap) nativeBuffer.add(",");
+ nativeBuffer.add(methodBuffer);
}
- nativeBuffer.add(methodBuffer);
nativeBuffer.add('\n});\n\n');
classesWithDynamicDispatch.add(classElement);

Powered by Google App Engine
This is Rietveld 408576698