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

Unified Diff: frog/minfrog

Issue 9110027: Some cleanups to Frog to avoid looking up its builtin types too much (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: removed dead files Created 8 years, 11 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
« frog/member.dart ('K') | « frog/member.dart ('k') | frog/type.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: frog/minfrog
diff --git a/frog/minfrog b/frog/minfrog
index 7ec3fde5156411797db9b160338107f85ef029b2..a9feef3a2da934a0d8c39c374c35376874ce4002 100755
--- a/frog/minfrog
+++ b/frog/minfrog
@@ -100,9 +100,6 @@ Object.prototype._set$4$isDynamic = function($0, $1, $2, $3, isDynamic) {
Object.prototype._set$5 = function($0, $1, $2, $3, $4) {
return this.noSuchMethod("_set", [$0, $1, $2, $3, $4]);
};
-Object.prototype._wrapDomCallback$2 = function($0, $1) {
- return this.noSuchMethod("_wrapDomCallback", [$0, $1]);
-};
Object.prototype.add$1 = function($0) {
return this.noSuchMethod("add", [$0]);
};
@@ -139,12 +136,12 @@ Object.prototype.contains$1 = function($0) {
Object.prototype.containsKey$1 = function($0) {
return this.noSuchMethod("containsKey", [$0]);
};
+Object.prototype.convertTo$2 = function($0, $1) {
+ return this.noSuchMethod("convertTo", [$0, $1]);
+};
Object.prototype.convertTo$3 = function($0, $1, $2) {
return this.noSuchMethod("convertTo", [$0, $1, $2]);
};
-Object.prototype.convertTo$4 = function($0, $1, $2, $3) {
- return this.noSuchMethod("convertTo", [$0, $1, $2, $3]);
-};
Object.prototype.copyWithNewType$2 = function($0, $1) {
return this.noSuchMethod("copyWithNewType", [$0, $1]);
};
@@ -644,7 +641,7 @@ $inherits(ImmutableList, ListFactory_E);
function ImmutableList(length) {
this._length = length;
// Initializers done
- ListFactory_E.call(this, length);
+ Array.call(this, length);
}
ImmutableList.ImmutableList$from$factory = function(other) {
var list = new ImmutableList(other.get$length());
@@ -859,6 +856,13 @@ HashMapImplementation.prototype.$index = function(key) {
if (index < 0) return null;
return this._values.$index(index);
}
+HashMapImplementation.prototype.putIfAbsent = function(key, ifAbsent) {
+ var index = this._probeForLookup(key);
+ if (index >= 0) return this._values.$index(index);
+ var value = ifAbsent();
+ this.$setindex(key, value);
+ return value;
+}
HashMapImplementation.prototype.remove = function(key) {
var index = this._probeForLookup(key);
if (index >= 0) {
@@ -1249,6 +1253,14 @@ LinkedHashMapImplementation.prototype.$index = function(key) {
if (entry == null) return null;
return entry.get$element().get$value();
}
+LinkedHashMapImplementation.prototype.putIfAbsent = function(key, ifAbsent) {
+ var value = this.$index(key);
+ if ((this.$index(key) == null) && !(this.containsKey(key))) {
+ value = ifAbsent();
+ this.$setindex(key, value);
+ }
+ return value;
+}
LinkedHashMapImplementation.prototype.getKeys = function() {
var list = new Array(this.get$length());
var index = 0;
@@ -2215,6 +2227,11 @@ CoreJs.prototype.generate = function(w) {
var opImpl = $$list.$index($$i);
w.writeln(opImpl);
}
+ if ($globals.world.dom != null) {
+ this.ensureTypeNameOf();
+ w.writeln('Object.prototype.get\$typeName = Object.prototype.\$typeNameOf;'/*'Object.prototype.get\$typeName = ' +
+ ' Object.prototype.\$typeNameOf;'*/);
+ }
}
CoreJs.prototype.generate$1 = CoreJs.prototype.generate;
// ********** Code for Element **************
@@ -2244,7 +2261,7 @@ Element.prototype.get$jsname = function() {
return this._jsname;
}
Element.prototype.get$nativeName = function() {
- return null;
+ return this._jsname;
}
Element.prototype.get$avoidNativeName = function() {
return false;
@@ -2338,19 +2355,19 @@ WorldGenerator.prototype.run = function() {
var mainCall = this.main.invoke(metaGen, null, mainTarget, Arguments.get$EMPTY(), false);
this.main.declaringType.markUsed();
if ($globals.options.compileAll) {
- this.markLibrariesUsed([$globals.world.get$coreimpl(), $globals.world.corelib, this.main.declaringType.get$library()]);
+ this.markLibrariesUsed([$globals.world.coreimpl, $globals.world.corelib, this.main.declaringType.get$library()]);
}
- if ($globals.world.corelib.types.$index('Isolate').get$isUsed() || $globals.world.get$coreimpl().types.$index('ReceivePortImpl').get$isUsed()) {
+ if ($globals.world.corelib.types.$index('Isolate').get$isUsed() || $globals.world.coreimpl.types.$index('ReceivePortImpl').get$isUsed()) {
if (this.corejs.useWrap0 || this.corejs.useWrap1) {
- this.genMethod($globals.world.get$coreimpl().types.$index('IsolateContext').getMember$1('eval'));
- this.genMethod($globals.world.get$coreimpl().types.$index('EventLoop').getMember$1('run'));
+ this.genMethod($globals.world.coreimpl.types.$index('IsolateContext').getMember$1('eval'));
+ this.genMethod($globals.world.coreimpl.types.$index('EventLoop').getMember$1('run'));
}
this.corejs.useIsolates = true;
- var isolateMain = $globals.world.get$coreimpl().topType.resolveMember('startRootIsolate').members.$index(0);
- var isolateMainTarget = new Value.type$ctor($globals.world.get$coreimpl().topType, this.main.get$span());
+ var isolateMain = $globals.world.coreimpl.topType.resolveMember('startRootIsolate').members.$index(0);
+ var isolateMainTarget = new Value.type$ctor($globals.world.coreimpl.topType, this.main.get$span());
mainCall = isolateMain.invoke(metaGen, null, isolateMainTarget, new Arguments(null, [this.main._get(metaGen, this.main.definition, null, false)]), false);
}
- this.writeTypes($globals.world.get$coreimpl());
+ this.writeTypes($globals.world.coreimpl);
this.writeTypes($globals.world.corelib);
this.writeTypes(this.main.declaringType.get$library());
if (this._mixins != null) this.writer.write(this._mixins.get$text());
@@ -2452,7 +2469,7 @@ WorldGenerator.prototype.writeTypes = function(lib) {
var $$list = this._orderValues(lib.types);
for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
var type = $$list.$index($$i);
- if ((type.get$isUsed() || $eq(type.get$library(), $globals.world.get$dom()) || type.get$isHiddenNativeType()) && type.get$isClass()) {
+ if ((type.get$isUsed() || type.get$library().get$isDom() || type.get$isHiddenNativeType()) && type.get$isClass()) {
this.writeType(type);
if (type.get$isGeneric()) {
var $list0 = this._orderValues(type.get$_concreteTypes());
@@ -2500,7 +2517,7 @@ WorldGenerator.prototype._maybeIsTest = function(onType, checkType) {
if (!isSubtype) {
body = $globals.world.objectType.varStubs.$index(checkName).get$body();
}
- else if (onType.name == 'StringImplementation' || onType.name == 'NumImplementation') {
+ else if ($eq(onType, $globals.world.stringImplType) || $eq(onType, $globals.world.numImplType)) {
body = ('return ' + onType.get$nativeType().name + '(this)');
}
this.writer.writeln(this._prototypeOf(onType, checkName) + (' = function(){' + body + '};'));
@@ -2512,7 +2529,7 @@ WorldGenerator.prototype.writeType = function(type) {
if (type.get$parent() != null && !type.get$isNative()) {
this.writeType(type.get$parent());
}
- if (type.name != null && (type instanceof ConcreteType) && $eq(type.get$library(), $globals.world.get$coreimpl()) && type.name.startsWith('ListFactory')) {
+ if (type.name != null && (type instanceof ConcreteType) && $eq(type.get$library(), $globals.world.coreimpl) && type.name.startsWith('ListFactory')) {
this.writer.writeln(('' + type.get$jsname() + ' = ' + type.get$genericType().get$jsname() + ';'));
return;
}
@@ -2745,9 +2762,6 @@ WorldGenerator.prototype.writeDynamicDispatchMetadata = function() {
var $this = this; // closure support
if (this.typesWithDynamicDispatch == null) return;
this.writer.comment(('// ' + this.typesWithDynamicDispatch.get$length() + ' dynamic types.'));
- function typeTag(type) {
- return type.get$definition().get$nativeType().get$name();
- }
var seen = new HashSetImplementation();
var types = [];
function visit(type) {
@@ -2779,12 +2793,12 @@ WorldGenerator.prototype.writeDynamicDispatchMetadata = function() {
var tagDefns = new HashMapImplementation();
function makeExpression(type) {
var expressions = [];
- var subtags = [typeTag(type)];
+ var subtags = [type.get$nativeName()];
function walk(type) {
var $$list = $this._orderCollectionValues(type.get$directSubtypes());
for (var $$i = 0;$$i < $$list.get$length(); $$i++) {
var subtype = $$list.$index($$i);
- var tag = typeTag(subtype);
+ var tag = subtype.get$nativeName();
var existing = tagDefns.$index(tag);
if (existing == null) {
subtags.add$1(tag);
@@ -2818,7 +2832,7 @@ WorldGenerator.prototype.writeDynamicDispatchMetadata = function() {
}
for (var $$i = dispatchTypes.iterator$0(); $$i.hasNext$0(); ) {
var type = $$i.next$0();
- tagDefns.$setindex(typeTag(type), makeExpression(type));
+ tagDefns.$setindex(type.get$nativeName(), makeExpression(type));
}
if (!tagDefns.isEmpty$0()) {
this.writer.enterBlock('(function(){');
@@ -2831,7 +2845,7 @@ WorldGenerator.prototype.writeDynamicDispatchMetadata = function() {
+ 'tags of classes implementing dynamic-dispatch-tag]'*/);
for (var $$i = dispatchTypes.iterator$0(); $$i.hasNext$0(); ) {
var type0 = $$i.next$0();
- this.writer.writeln(("['" + typeTag(type0) + "', " + tagDefns.$index(typeTag(type0)) + "],"));
+ this.writer.writeln(("['" + type0.get$nativeName() + "', " + tagDefns.$index(type0.get$nativeName()) + "],"));
}
this.writer.exitBlock('];');
this.writer.writeln('\$dynamicSetMetadata(table);');
@@ -3377,7 +3391,7 @@ MethodGenerator.prototype._makeLambdaMethod = function(name, func) {
return meth;
}
MethodGenerator.prototype.visitBool = function(node) {
- return this.visitValue(node).convertTo$3(this, $globals.world.nonNullBool, node);
+ return this.visitValue(node).convertTo$2(this, $globals.world.nonNullBool);
}
MethodGenerator.prototype.visitValue = function(node) {
if (node == null) return null;
@@ -3387,7 +3401,7 @@ MethodGenerator.prototype.visitValue = function(node) {
}
MethodGenerator.prototype.visitTypedValue = function(node, expectedType) {
var val = this.visitValue(node);
- return expectedType == null ? val : val.convertTo$3(this, expectedType, node);
+ return expectedType == null ? val : val.convertTo$2(this, expectedType);
}
MethodGenerator.prototype.visitVoid = function(node) {
if ((node instanceof PostfixExpression)) {
@@ -3440,7 +3454,7 @@ MethodGenerator.prototype.visitVariableDefinition = function(node) {
}
}
else {
- value = value.convertTo$3(this, type, node.values.$index(i));
+ value = value.convertTo$2(this, type);
this.writer.write(('' + val.get$code() + ' = ' + value.get$code()));
}
}
@@ -4006,7 +4020,7 @@ MethodGenerator.prototype._visitVarAssign = function(kind, xn, yn, position, cap
if (x.get$isFinal()) {
$globals.world.error(('final variable "' + x.get$code() + '" is not assignable'), position.span);
}
- y = y.convertTo$3(this, x.get$type(), yn);
+ y = y.convertTo$2(this, x.get$type());
if (kind == 0) {
x = captureOriginal(x);
return new Value(y.get$type(), ('' + x.get$code() + ' = ' + y.get$code()), position.span, true);
@@ -4088,13 +4102,13 @@ MethodGenerator.prototype.visitUnaryExpression = function(node) {
return EvaluatedValue.EvaluatedValue$factory(value.get$type(), newVal, ('' + newVal), node.span);
}
else {
- var newVal = value.convertTo$3(this, $globals.world.nonNullBool, node);
+ var newVal = value.convertTo$2(this, $globals.world.nonNullBool);
return new Value(newVal.get$type(), ('!' + newVal.get$code()), node.span, true);
}
case 42/*TokenKind.ADD*/:
- return value.convertTo$3(this, $globals.world.numType, node);
+ return value.convertTo$2(this, $globals.world.numType);
case 43/*TokenKind.SUB*/:
case 18/*TokenKind.BIT_NOT*/:
@@ -4223,12 +4237,12 @@ MethodGenerator.prototype.visitListExpression = function(node) {
argsCode.add$1(arg.get$code());
}
}
- $globals.world.get$coreimpl().types.$index('ListFactory').markUsed$0();
+ $globals.world.listFactoryType.markUsed();
var code = ('[' + Strings.join(argsCode, ", ") + ']');
var value = new Value($globals.world.listType, code, node.span, true);
if (node.isConst) {
- var immutableList = $globals.world.get$coreimpl().types.$index('ImmutableList');
- var immutableListCtor = immutableList.getConstructor$1('from');
+ var immutableList = $globals.world.immutableListType;
+ var immutableListCtor = immutableList.getConstructor('from');
var result = immutableListCtor.invoke$4(this, node, new Value.type$ctor(value.get$type(), node.span), new Arguments(null, [value]));
value = $globals.world.gen.globalForConst(ConstListValue.ConstListValue$factory(immutableList, argValues, ('const ' + code), result.get$code(), node.span), argValues);
}
@@ -4357,11 +4371,11 @@ MethodGenerator.prototype.visitLiteralExpression = function(node) {
return new Value(type, ('(' + Strings.join(items, " + ") + ')'), node.span, true);
}
if ((typeof(node.value) == 'number')) {
- $globals.world.get$coreimpl().types.$index('NumImplementation').markUsed$0();
+ $globals.world.numImplType.markUsed();
}
var text = node.text;
if (type.get$isString()) {
- $globals.world.get$coreimpl().types.$index('StringImplementation').markUsed$0();
+ $globals.world.stringImplType.markUsed();
if (text.startsWith$1('@')) {
text = MethodGenerator._escapeString(parseStringLiteral(text));
text = ('"' + text + '"');
@@ -4532,7 +4546,10 @@ Library.prototype.get$isCore = function() {
return $eq(this, $globals.world.corelib);
}
Library.prototype.get$isCoreImpl = function() {
- return $eq(this, $globals.world.get$coreimpl());
+ return $eq(this, $globals.world.coreimpl);
+}
+Library.prototype.get$isDom = function() {
+ return $eq(this, $globals.world.dom);
}
Library.prototype.get$span = function() {
return new SourceSpan(this.baseSource, 0, 0);
@@ -4602,7 +4619,7 @@ Library.prototype.getOrAddFunctionType = function(enclosingElement, name, func)
Library.prototype.addType = function(name, definition, isClass) {
if (this.types.containsKey(name)) {
var existingType = this.types.$index(name);
- if (this.get$isCore() && existingType.get$definition() == null) {
+ if ((this.get$isCore() || this.get$isCoreImpl()) && existingType.get$definition() == null) {
existingType.setDefinition$1(definition);
}
else {
@@ -4991,7 +5008,7 @@ Parameter.prototype.genValue = function(method, context) {
if (!this.value.get$isConst()) {
$globals.world.error('default parameter values must be constant', this.value.span);
}
- this.value = this.value.convertTo(context, this.type, this.definition.value, false);
+ this.value = this.value.convertTo(context, this.type, false);
}
Parameter.prototype.copyWithNewType = function(newMethod, newType) {
var ret = new Parameter(this.definition, newMethod);
@@ -5334,7 +5351,7 @@ FieldMember.prototype._get = function(context, node, target, isDynamic) {
}
$globals.world.gen.hasStatics = true;
if (this.declaringType.get$isTop()) {
- if ($eq(this.declaringType.get$library(), $globals.world.get$dom())) {
+ if (this.declaringType.get$library().get$isDom()) {
return new Value(this.type, ('' + this.get$jsname()), node.span, true);
}
else {
@@ -5364,7 +5381,7 @@ FieldMember.prototype._get = function(context, node, target, isDynamic) {
}
FieldMember.prototype._set = function(context, node, target, value, isDynamic) {
var lhs = this._get(context, node, target, isDynamic);
- value = value.convertTo(context, this.type, node, isDynamic);
+ value = value.convertTo(context, this.type, isDynamic);
return new Value(this.type, ('' + lhs.get$code() + ' = ' + value.code), node.span, true);
}
FieldMember.prototype._get$3 = function($0, $1, $2) {
@@ -5869,7 +5886,7 @@ MethodMember.prototype.invoke = function(context, node, target, args, isDynamic)
var msg = MethodMember._argCountMsg(args.get$length(), this.parameters.get$length(), false);
return this._argError(context, node, target, args, msg, i);
}
- arg = arg.convertTo$4(context, this.parameters.$index(i).get$type(), node, isDynamic);
+ arg = arg.convertTo$3(context, this.parameters.$index(i).get$type(), isDynamic);
if (this.isConst && arg.get$isConst()) {
argsCode.add$1(arg.get$canonicalCode());
}
@@ -5887,7 +5904,7 @@ MethodMember.prototype.invoke = function(context, node, target, args, isDynamic)
arg = this.parameters.$index(i).get$value();
}
else {
- arg = arg.convertTo$4(context, this.parameters.$index(i).get$type(), node, isDynamic);
+ arg = arg.convertTo$3(context, this.parameters.$index(i).get$type(), isDynamic);
namedArgsUsed++;
}
if (arg == null || !this.parameters.$index(i).get$isOptional()) {
@@ -5954,25 +5971,27 @@ MethodMember.prototype.invoke = function(context, node, target, args, isDynamic)
}
}
}
- if (this.name == 'get:typeName' && $eq(this.declaringType.get$library(), $globals.world.get$dom())) {
+ if (this.name == 'get:typeName' && this.declaringType.get$library().get$isDom()) {
$globals.world.gen.corejs.ensureTypeNameOf();
}
return new Value(this.get$inferredResult(), code, node.span, true);
}
MethodMember.prototype._invokeConstructor = function(context, node, target, args, argsString) {
this.declaringType.markUsed();
+ var ctor = this.get$constructorName();
+ if (ctor != '') ctor = ('.' + ctor + '\$ctor');
if (!target.isType) {
- var code = (this.get$constructorName() != '') ? ('' + this.declaringType.get$jsname() + '.' + this.get$constructorName() + '\$ctor.call(' + argsString + ')') : ('' + this.declaringType.get$jsname() + '.call(' + argsString + ')');
+ var code = ('' + this.declaringType.get$nativeName() + ctor + '.call(' + argsString + ')');
return new Value(target.get$type(), code, node.span, true);
}
else {
- var typeName = this.declaringType.get$isNative() ? this.declaringType.get$nativeType().name : this.declaringType.get$jsname();
- var code = (this.get$constructorName() != '') ? ('new ' + typeName + '.' + this.get$constructorName() + '\$ctor(' + argsString + ')') : ('new ' + typeName + '(' + argsString + ')');
+ var code = ('new ' + this.declaringType.get$nativeName() + ctor + '(' + argsString + ')');
if (this.isConst && (node instanceof NewExpression) && node.get$dynamic().get$isConst()) {
return this._invokeConstConstructor(node, code, target, args);
}
else {
- return new Value(target.get$type(), code, node.span, true);
+ var span = node != null ? node.span : target.span;
+ return new Value(target.get$type(), code, span, true);
}
}
}
@@ -11158,7 +11177,7 @@ Type.prototype.getAllMembers = function() {
return new HashMapImplementation();
}
Type.prototype.get$nativeName = function() {
- return this.get$isNative() ? this.get$definition().get$nativeType().get$name() : null;
+ return this.get$isNative() ? this.get$definition().get$nativeType().get$name() : this.get$jsname();
}
Type.prototype.get$avoidNativeName = function() {
return this.get$isHiddenNativeType();
@@ -12490,41 +12509,16 @@ Value.prototype._varCall = function(context, node, args) {
return stub.invoke$4(context, node, this, args);
}
Value.prototype.needsConversion = function(toType) {
- var callMethod = toType.getCallMethod();
- if (callMethod != null) {
- var arity = callMethod.get$parameters().get$length();
- var myCall = this.get$type().getCallMethod();
- if (myCall == null || $ne(myCall.get$parameters().get$length(), arity)) {
- return true;
- }
- }
- if ($globals.options.enableTypeChecks) {
- var fromType = this.get$type();
- if (this.get$type().get$isVar() && (this.code != 'null' || !toType.get$isNullable())) {
- fromType = $globals.world.objectType;
- }
- var bothNum = this.get$type().get$isNum() && toType.get$isNum();
- return !(fromType.isSubtypeOf(toType) || bothNum);
- }
- return false;
+ return $ne(this, this.convertTo(null, toType, true));
}
-Value.prototype.convertTo = function(context, toType, node, isDynamic) {
+Value.prototype.convertTo = function(context, toType, isDynamic) {
var checked = !isDynamic;
var callMethod = toType.getCallMethod();
if (callMethod != null) {
if (checked && !toType.isAssignable(this.get$type())) {
- this.convertWarning(toType, node);
- }
- var arity = callMethod.get$parameters().get$length();
- var myCall = this.get$type().getCallMethod();
- if (myCall == null || $ne(myCall.get$parameters().get$length(), arity)) {
- var stub = $globals.world.functionType.getCallStub(Arguments.Arguments$bare$factory(arity));
- var val = new Value(toType, ('to\$' + stub.name + '(' + this.code + ')'), node.span, true);
- return this._isDomCallback(toType) && !this._isDomCallback(this.get$type()) ? val._wrapDomCallback$2(toType, arity) : val;
- }
- else if (this._isDomCallback(toType) && !this._isDomCallback(this.get$type())) {
- return this._wrapDomCallback(toType, arity);
+ this.convertWarning(toType);
}
+ return this._maybeWrapFunction(toType, callMethod);
}
var fromType = this.get$type();
if (this.get$type().get$isVar() && (this.code != 'null' || !toType.get$isNullable())) {
@@ -12535,28 +12529,38 @@ Value.prototype.convertTo = function(context, toType, node, isDynamic) {
return this;
}
if (checked && !toType.isSubtypeOf(this.get$type())) {
- this.convertWarning(toType, node);
+ this.convertWarning(toType);
}
if ($globals.options.enableTypeChecks) {
- return this._typeAssert(context, toType, node, isDynamic);
+ if (context == null && isDynamic) {
+ return null;
+ }
+ return this._typeAssert(context, toType, isDynamic);
}
else {
return this;
}
}
-Value.prototype._isDomCallback = function(toType) {
- return ((toType.get$definition() instanceof FunctionTypeDefinition) && $eq(toType.get$library(), $globals.world.get$dom()));
-}
-Value.prototype._wrapDomCallback = function(toType, arity) {
- if (arity == 0) {
- $globals.world.gen.corejs.useWrap0 = true;
+Value.prototype._maybeWrapFunction = function(toType, callMethod) {
+ var arity = callMethod.parameters.get$length();
+ var myCall = this.get$type().getCallMethod();
+ var result = this;
+ if (myCall == null || $ne(myCall.get$parameters().get$length(), arity)) {
+ var stub = $globals.world.functionType.getCallStub(Arguments.Arguments$bare$factory(arity));
+ result = new Value(toType, ('to\$' + stub.name + '(' + this.code + ')'), this.span, true);
}
- else {
- $globals.world.gen.corejs.useWrap1 = true;
+ if (toType.get$library().get$isDom() && !this.get$type().get$library().get$isDom()) {
+ if (arity == 0) {
+ $globals.world.gen.corejs.useWrap0 = true;
+ }
+ else {
+ $globals.world.gen.corejs.useWrap1 = true;
+ }
+ result = new Value(toType, ('\$wrap_call\$' + arity + '(' + result.code + ')'), this.span, true);
}
- return new Value(toType, ('\$wrap_call\$' + arity + '(' + this.code + ')'), this.span, true);
+ return result;
}
-Value.prototype._typeAssert = function(context, toType, node, isDynamic) {
+Value.prototype._typeAssert = function(context, toType, isDynamic) {
if ((toType instanceof ParameterType)) {
var p = toType;
toType = p.extendsType;
@@ -12566,10 +12570,9 @@ Value.prototype._typeAssert = function(context, toType, node, isDynamic) {
}
function throwTypeError(paramName) {
return $globals.world.withoutForceDynamic((function () {
- var typeError = $globals.world.corelib.types.$index('TypeError');
- var typeErrorCtor = typeError.getConstructor$1('_internal');
+ var typeErrorCtor = $globals.world.typeErrorType.getConstructor('_internal');
$globals.world.gen.corejs.ensureTypeNameOf();
- var result = typeErrorCtor.invoke$5(context, node, new Value.type$ctor(typeError, null), new Arguments(null, [new Value($globals.world.objectType, paramName, null, true), new Value($globals.world.stringType, ('"' + toType.name + '"'), null, true)]), isDynamic);
+ var result = typeErrorCtor.invoke$5(context, null, new Value.type$ctor($globals.world.typeErrorType, null), new Arguments(null, [new Value($globals.world.objectType, paramName, null, true), new Value($globals.world.stringType, ('"' + toType.name + '"'), null, true)]), isDynamic);
$globals.world.gen.corejs.useThrow = true;
return ('\$throw(' + result.get$code() + ')');
})
@@ -12600,9 +12603,10 @@ Value.prototype._typeAssert = function(context, toType, node, isDynamic) {
check = ('(' + context.assignTemp(temp, this).code + ' == null ? null :');
check = check + (' ' + temp.get$code() + '.' + checkName + '())');
if ($ne(this, temp)) context.freeTemp(temp);
- if (!$globals.world.objectType.varStubs.containsKey(checkName)) {
- $globals.world.objectType.varStubs.$setindex(checkName, new VarMethodStub(checkName, null, Arguments.get$EMPTY(), throwTypeError('this')));
- }
+ $globals.world.objectType.varStubs.putIfAbsent(checkName, (function () {
+ return new VarMethodStub(checkName, null, Arguments.get$EMPTY(), throwTypeError('this'));
+ })
+ );
}
return new Value(toType, check, this.span, true);
}
@@ -12651,8 +12655,8 @@ Value.prototype.instanceOf = function(context, toType, span, isTrue, forceCheck)
}
return new Value($globals.world.nonNullBool, testCode, span, true);
}
-Value.prototype.convertWarning = function(toType, node) {
- $globals.world.warning(('type "' + this.get$type().name + '" is not assignable to "' + toType.name + '"'), node.span);
+Value.prototype.convertWarning = function(toType) {
+ $globals.world.warning(('type "' + this.get$type().name + '" is not assignable to "' + toType.name + '"'), this.span);
}
Value.prototype.invokeNoSuchMethod = function(context, name, node, args) {
var pos = '';
@@ -12667,12 +12671,11 @@ Value.prototype.invokeNoSuchMethod = function(context, name, node, args) {
var noSuchArgs = [new Value($globals.world.stringType, ('"' + name + '"'), node.span, true), new Value($globals.world.listType, ('[' + pos + ']'), node.span, true)];
return this._resolveMember(context, 'noSuchMethod', node, false).invoke$4(context, node, this, new Arguments(null, noSuchArgs));
}
-Value.prototype._wrapDomCallback$2 = Value.prototype._wrapDomCallback;
Value.prototype.checkFirstClass$1 = Value.prototype.checkFirstClass;
-Value.prototype.convertTo$3 = function($0, $1, $2) {
- return this.convertTo($0, $1, $2, false);
+Value.prototype.convertTo$2 = function($0, $1) {
+ return this.convertTo($0, $1, false);
};
-Value.prototype.convertTo$4 = Value.prototype.convertTo;
+Value.prototype.convertTo$3 = Value.prototype.convertTo;
Value.prototype.get_$3 = Value.prototype.get_;
Value.prototype.instanceOf$3$isTrue$forceCheck = Value.prototype.instanceOf;
Value.prototype.instanceOf$4 = function($0, $1, $2, $3) {
@@ -12918,30 +12921,31 @@ function World(files) {
this.reader = new LibraryReader();
// Initializers done
}
-World.prototype.get$coreimpl = function() {
- return this.libraries.$index('dart:coreimpl');
-}
-World.prototype.get$dom = function() {
- return this.libraries.$index('dart:dom');
-}
World.prototype.get$functionType = function() { return this.functionType; };
World.prototype.set$functionType = function(value) { return this.functionType = value; };
World.prototype.init = function() {
this.corelib = new Library(this.readFile('dart:core'));
this.libraries.$setindex('dart:core', this.corelib);
this._todo.add(this.corelib);
- this.voidType = this._addToCoreLib('void', false);
- this.dynamicType = this._addToCoreLib('Dynamic', false);
+ this.coreimpl = this.getOrAddLibrary('dart:coreimpl');
+ this.voidType = this.corelib.addType('void', null, false);
+ this.dynamicType = this.corelib.addType('Dynamic', null, false);
this.varType = this.dynamicType;
- this.objectType = this._addToCoreLib('Object', true);
- this.numType = this._addToCoreLib('num', false);
- this.intType = this._addToCoreLib('int', false);
- this.doubleType = this._addToCoreLib('double', false);
- this.boolType = this._addToCoreLib('bool', false);
- this.stringType = this._addToCoreLib('String', false);
- this.listType = this._addToCoreLib('List', false);
- this.mapType = this._addToCoreLib('Map', false);
- this.functionType = this._addToCoreLib('Function', false);
+ this.objectType = this.corelib.addType('Object', null, true);
+ this.numType = this.corelib.addType('num', null, false);
+ this.intType = this.corelib.addType('int', null, false);
+ this.doubleType = this.corelib.addType('double', null, false);
+ this.boolType = this.corelib.addType('bool', null, false);
+ this.stringType = this.corelib.addType('String', null, false);
+ this.listType = this.corelib.addType('List', null, false);
+ this.mapType = this.corelib.addType('Map', null, false);
+ this.functionType = this.corelib.addType('Function', null, false);
+ this.typeErrorType = this.corelib.addType('TypeError', null, false);
+ this.numImplType = this.coreimpl.addType('NumImplementation', null, true);
+ this.stringImplType = this.coreimpl.addType('StringImplementation', null, true);
+ this.immutableListType = this.coreimpl.addType('ImmutableList', null, true);
+ this.listFactoryType = this.coreimpl.addType('ListFactory', null, true);
+ this.functionImplType = this.coreimpl.addType('_FunctionImplementation', null, true);
this.nonNullBool = new NonNullableType(this.boolType);
}
World.prototype._addMember = function(member) {
@@ -12961,7 +12965,7 @@ World.prototype._addMember = function(member) {
}
}
World.prototype._addTopName = function(named) {
- if (named.get$nativeName() != null) {
+ if ((named instanceof Type) && named.get$isNative()) {
this._addJavascriptTopName(named, named.get$nativeName());
}
this._addJavascriptTopName(named, named.get$jsname());
@@ -13008,11 +13012,6 @@ World.prototype._renameJavascriptTopName = function(named) {
World.prototype._addType = function(type) {
if (!type.get$isTop()) this._addTopName(type);
}
-World.prototype._addToCoreLib = function(name, isClass) {
- var ret = new DefinedType(name, this.corelib, null, isClass);
- this.corelib.types.$setindex(name, ret);
- return ret;
-}
World.prototype.toJsIdentifier = function(name) {
if (name == null) return null;
if (this._jsKeywords == null) {
@@ -13124,6 +13123,9 @@ World.prototype.getOrAddLibrary = function(filename) {
}
this.libraries.$setindex(filename, library);
this._todo.add(library);
+ if (filename == 'dart:dom') {
+ this.dom = library;
+ }
}
return library;
}
@@ -13468,9 +13470,8 @@ function VarFunctionStub(name, callArgs) {
this.args = callArgs.toCallStubArgs();
// Initializers done
VarMember.call(this, name);
- var funcImpl = $globals.world.get$coreimpl().types.$index('_FunctionImplementation');
- funcImpl.markUsed$0();
- $globals.world.gen.genMethod(funcImpl.getMember$1('_genStub'));
+ $globals.world.functionImplType.markUsed();
+ $globals.world.gen.genMethod($globals.world.functionImplType.getMember('_genStub'));
}
VarFunctionStub.prototype.invoke = function(context, node, target, args) {
return VarMember.prototype.invoke.call(this, context, node, target, args);
« frog/member.dart ('K') | « frog/member.dart ('k') | frog/type.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698