Tighten up ::class syntax
Summary:
Previously, we allowed the following syntax in the emitter
```
'MyClass'::class
```
Which was similar to
```
MyClass::class
```
However, 'MyClass'::class also causes MyClass to be loaded (unlike a usual ::class expression) since the bytecode we emit is something like
```
String "MyClass"
ClassGetC
ClassName
```
We should instead just put the classname directly there instead of wrapping it in a string.
This was banned in the typechecker as a "parse" error - though we did not trigger it in non-typechecker codepaths.
We want to change this as part of our effort to tighten up classname for class pointer and function pointer rollout. This diff fires this error (and other previously only typechecker path parse errors related to bad syntax involving `::class:`) occur in all codepaths instead of just the typechecker only path.
Reviewed By: periodic1236
Differential Revision:
D22170448
fbshipit-source-id:
132f36fff1fb74daddc176934d520daec4a5653b