mirror of
https://github.com/dart-lang/sdk
synced 2024-09-19 21:01:50 +00:00
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:
parent
dab07c3e0c
commit
cc3e05ea99
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
20
tests/lib/mirrors/parameter_is_const_test.dart
Normal file
20
tests/lib/mirrors/parameter_is_const_test.dart
Normal 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);
|
||||
}
|
35
tests/lib/mirrors/variable_is_const_test.dart
Normal file
35
tests/lib/mirrors/variable_is_const_test.dart
Normal 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));
|
||||
}
|
Loading…
Reference in a new issue