| // Copyright (c) 2014, 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. |
| |
| import "package:expect/expect.dart"; |
| |
| var b = true; |
| |
| @pragma("vm:never-inline") |
| void checkSymbol(String string) { |
| // Just check that it can be created. |
| new Symbol(string); |
| // Prevent inlining. |
| try {} finally {} |
| } |
| |
| main() { |
| var x; |
| |
| // 'void' is allowed as a symbol name. |
| x = const Symbol('void'); |
| x = #void; |
| x = new Symbol('void'); |
| |
| // 'void' can be part of a dotted symbol name, via the constructor. |
| checkSymbol('void.foo'); |
| checkSymbol('foo.void'); |
| |
| // Reserved words are allowed, via the constructor. |
| checkSymbol('assert'); |
| checkSymbol('break'); |
| checkSymbol('case'); |
| checkSymbol('catch'); |
| checkSymbol('class'); |
| checkSymbol('const'); |
| checkSymbol('continue'); |
| checkSymbol('default'); |
| checkSymbol('do'); |
| checkSymbol('else'); |
| checkSymbol('enum'); |
| checkSymbol('extends'); |
| checkSymbol('false'); |
| checkSymbol('final'); |
| checkSymbol('finally'); |
| checkSymbol('for'); |
| checkSymbol('if'); |
| checkSymbol('in'); |
| checkSymbol('is'); |
| checkSymbol('new'); |
| checkSymbol('null'); |
| checkSymbol('rethrow'); |
| checkSymbol('return'); |
| checkSymbol('super'); |
| checkSymbol('switch'); |
| checkSymbol('this'); |
| checkSymbol('throw'); |
| checkSymbol('true'); |
| checkSymbol('try'); |
| checkSymbol('var'); |
| checkSymbol('while'); |
| checkSymbol('with'); |
| |
| // Reserved words can also be part of a dot separated list, via constructor. |
| checkSymbol('foo.assert'); |
| checkSymbol('foo.break'); |
| checkSymbol('foo.case'); |
| checkSymbol('foo.catch'); |
| checkSymbol('foo.class'); |
| checkSymbol('foo.const'); |
| checkSymbol('foo.continue'); |
| checkSymbol('foo.default'); |
| checkSymbol('foo.do'); |
| checkSymbol('foo.else'); |
| checkSymbol('foo.enum'); |
| checkSymbol('foo.extends'); |
| checkSymbol('foo.false'); |
| checkSymbol('foo.final'); |
| checkSymbol('foo.finally'); |
| checkSymbol('foo.for'); |
| checkSymbol('foo.if'); |
| checkSymbol('foo.in'); |
| checkSymbol('foo.is'); |
| checkSymbol('foo.new'); |
| checkSymbol('foo.null'); |
| checkSymbol('foo.rethrow'); |
| checkSymbol('foo.return'); |
| checkSymbol('foo.super'); |
| checkSymbol('foo.switch'); |
| checkSymbol('foo.this'); |
| checkSymbol('foo.throw'); |
| checkSymbol('foo.true'); |
| checkSymbol('foo.try'); |
| checkSymbol('foo.var'); |
| checkSymbol('foo.while'); |
| checkSymbol('foo.with'); |
| checkSymbol('assert.foo'); |
| checkSymbol('break.foo'); |
| checkSymbol('case.foo'); |
| checkSymbol('catch.foo'); |
| checkSymbol('class.foo'); |
| checkSymbol('const.foo'); |
| checkSymbol('continue.foo'); |
| checkSymbol('default.foo'); |
| checkSymbol('do.foo'); |
| checkSymbol('else.foo'); |
| checkSymbol('enum.foo'); |
| checkSymbol('extends.foo'); |
| checkSymbol('false.foo'); |
| checkSymbol('final.foo'); |
| checkSymbol('finally.foo'); |
| checkSymbol('for.foo'); |
| checkSymbol('if.foo'); |
| checkSymbol('in.foo'); |
| checkSymbol('is.foo'); |
| checkSymbol('new.foo'); |
| checkSymbol('null.foo'); |
| checkSymbol('rethrow.foo'); |
| checkSymbol('return.foo'); |
| checkSymbol('super.foo'); |
| checkSymbol('switch.foo'); |
| checkSymbol('this.foo'); |
| checkSymbol('throw.foo'); |
| checkSymbol('true.foo'); |
| checkSymbol('try.foo'); |
| checkSymbol('var.foo'); |
| checkSymbol('while.foo'); |
| checkSymbol('with.foo'); |
| |
| // A constant symbol with a reserved word is allowed, via constructor. |
| x = const Symbol('void.foo'); |
| x = const Symbol('foo.void'); |
| x = const Symbol('assert'); |
| x = const Symbol('break'); |
| x = const Symbol('case'); |
| x = const Symbol('catch'); |
| x = const Symbol('class'); |
| x = const Symbol('const'); |
| x = const Symbol('continue'); |
| x = const Symbol('default'); |
| x = const Symbol('do'); |
| x = const Symbol('else'); |
| x = const Symbol('enum'); |
| x = const Symbol('extends'); |
| x = const Symbol('false'); |
| x = const Symbol('final'); |
| x = const Symbol('finally'); |
| x = const Symbol('for'); |
| x = const Symbol('if'); |
| x = const Symbol('in'); |
| x = const Symbol('is'); |
| x = const Symbol('new'); |
| x = const Symbol('null'); |
| x = const Symbol('rethrow'); |
| x = const Symbol('return'); |
| x = const Symbol('super'); |
| x = const Symbol('switch'); |
| x = const Symbol('this'); |
| x = const Symbol('throw'); |
| x = const Symbol('true'); |
| x = const Symbol('try'); |
| x = const Symbol('var'); |
| x = const Symbol('while'); |
| x = const Symbol('with'); |
| x = const Symbol('foo.assert'); |
| x = const Symbol('foo.break'); |
| x = const Symbol('foo.case'); |
| x = const Symbol('foo.catch'); |
| x = const Symbol('foo.class'); |
| x = const Symbol('foo.const'); |
| x = const Symbol('foo.continue'); |
| x = const Symbol('foo.default'); |
| x = const Symbol('foo.do'); |
| x = const Symbol('foo.else'); |
| x = const Symbol('foo.enum'); |
| x = const Symbol('foo.extends'); |
| x = const Symbol('foo.false'); |
| x = const Symbol('foo.final'); |
| x = const Symbol('foo.finally'); |
| x = const Symbol('foo.for'); |
| x = const Symbol('foo.if'); |
| x = const Symbol('foo.in'); |
| x = const Symbol('foo.is'); |
| x = const Symbol('foo.new'); |
| x = const Symbol('foo.null'); |
| x = const Symbol('foo.rethrow'); |
| x = const Symbol('foo.return'); |
| x = const Symbol('foo.super'); |
| x = const Symbol('foo.switch'); |
| x = const Symbol('foo.this'); |
| x = const Symbol('foo.throw'); |
| x = const Symbol('foo.true'); |
| x = const Symbol('foo.try'); |
| x = const Symbol('foo.var'); |
| x = const Symbol('foo.while'); |
| x = const Symbol('foo.with'); |
| x = const Symbol('assert.foo'); |
| x = const Symbol('break.foo'); |
| x = const Symbol('case.foo'); |
| x = const Symbol('catch.foo'); |
| x = const Symbol('class.foo'); |
| x = const Symbol('const.foo'); |
| x = const Symbol('continue.foo'); |
| x = const Symbol('default.foo'); |
| x = const Symbol('do.foo'); |
| x = const Symbol('else.foo'); |
| x = const Symbol('enum.foo'); |
| x = const Symbol('extends.foo'); |
| x = const Symbol('false.foo'); |
| x = const Symbol('final.foo'); |
| x = const Symbol('finally.foo'); |
| x = const Symbol('for.foo'); |
| x = const Symbol('if.foo'); |
| x = const Symbol('in.foo'); |
| x = const Symbol('is.foo'); |
| x = const Symbol('new.foo'); |
| x = const Symbol('null.foo'); |
| x = const Symbol('rethrow.foo'); |
| x = const Symbol('return.foo'); |
| x = const Symbol('super.foo'); |
| x = const Symbol('switch.foo'); |
| x = const Symbol('this.foo'); |
| x = const Symbol('throw.foo'); |
| x = const Symbol('true.foo'); |
| x = const Symbol('try.foo'); |
| x = const Symbol('var.foo'); |
| x = const Symbol('while.foo'); |
| x = const Symbol('with.foo'); |
| } |