Implement VariableMirror.isConst in the VM and ParameterMirror.isConst in dart2js.

BUG=http://dartbug.com/14671
R=ahe@google.com, asiva@google.com, gbracha@google.com

Review URL: https://codereview.chromium.org//58183003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30161 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
rmacnak@google.com 2013-11-11 17:54:58 +00:00
parent dab07c3e0c
commit cc3e05ea99
6 changed files with 67 additions and 3 deletions

View file

@ -300,13 +300,14 @@ static RawInstance* CreateVariableMirror(const Field& field,
const String& name = String::Handle(field.name());
const Array& args = Array::Handle(Array::New(6));
const Array& args = Array::Handle(Array::New(7));
args.SetAt(0, field_ref);
args.SetAt(1, name);
args.SetAt(2, owner_mirror);
args.SetAt(3, Object::null_instance()); // Null for type.
args.SetAt(4, Bool::Get(field.is_static()));
args.SetAt(5, Bool::Get(field.is_final()));
args.SetAt(6, Bool::Get(field.is_const()));
return CreateMirror(Symbols::_LocalVariableMirrorImpl(), args);
}

View file

@ -1266,12 +1266,14 @@ class _LocalVariableMirrorImpl extends _LocalDeclarationMirrorImpl
this.owner,
this._type,
this.isStatic,
this.isFinal)
this.isFinal,
this.isConst)
: super(reflectee, _s(simpleName));
final DeclarationMirror owner;
final bool isStatic;
final bool isFinal;
final bool isConst;
bool get isPrivate => _n(simpleName).startsWith('_');
@ -1315,7 +1317,9 @@ class _LocalParameterMirrorImpl extends _LocalVariableMirrorImpl
owner,
null, // We override the type.
false, // isStatic does not apply.
isFinal);
isFinal,
false // Not const.
);
final int _position;
final bool isOptional;

View file

@ -1768,6 +1768,8 @@ class JsParameterMirror extends JsDeclarationMirror implements ParameterMirror {
// TODO(ahe): Implement this.
bool get isFinal => false;
bool get isConst => false;
// TODO(ahe): Implement this.
bool get isOptional => false;

View file

@ -82,6 +82,8 @@ mirrors/typedef_test/none: RuntimeError # http://dartbug.com/6490
mirrors/typedef_metadata_test: RuntimeError # Issue 12785
mirrors/typevariable_mirror_metadata_test: CompileTimeError # Issue 10905
mirrors/type_variable_owner_test/01: RuntimeError # Issue 12785
mirrors/variable_is_const_test/none: RuntimeError # Issue 14671
mirrors/variable_is_const_test/01: MissingCompileTimeError # Issue 5519
[ $runtime == safari ]
mirrors/return_type_test: Pass, Timeout # Issue 12858

View file

@ -0,0 +1,20 @@
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library test.parameter_is_const;
import 'dart:mirrors';
import 'package:expect/expect.dart';
class Class {
foo(
const /// 01: compile-time error
param) {}
}
main() {
MethodMirror mm = reflectClass(Class).declarations[#foo];
Expect.isFalse(mm.parameters.single.isConst);
}

View file

@ -0,0 +1,35 @@
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library test.variable_is_const;
import 'dart:mirrors';
import 'package:expect/expect.dart';
class Class {
const /// 01: compile-time error
int instanceWouldBeConst = 1;
var instanceNonConst = 2;
static const staticConst = 3;
static var staticNonConst = 4;
}
const topLevelConst = 5;
var topLevelNonConst = 6;
main() {
bool isConst(m, Symbol s) => (m.declarations[s] as VariableMirror).isConst;
ClassMirror cm = reflectClass(Class);
Expect.isFalse(isConst(cm, #instanceWouldBeConst));
Expect.isFalse(isConst(cm, #instanceNonConst));
Expect.isTrue(isConst(cm, #staticConst));
Expect.isFalse(isConst(cm, #staticNonConst));
LibraryMirror lm = cm.owner;
Expect.isTrue(isConst(lm, #topLevelConst));
Expect.isFalse(isConst(lm, #topLevelNonConst));
}