JET-50 Drop the 'new' keyword

This commit is contained in:
Andrey Breslav
2011-06-15 18:00:10 +04:00
parent c9d9001ad8
commit c2fbbff782
103 changed files with 921 additions and 980 deletions
+1 -1
View File
@@ -87,7 +87,7 @@ atomicExpression
: when : when
: try : try
: "typeof" "(" expression ")" : "typeof" "(" expression ")"
: "new" constructorInvocation // : "new" constructorInvocation
: objectLiteral : objectLiteral
// : declaration // : declaration
: jump : jump
+1 -1
View File
@@ -74,7 +74,7 @@ public interface JetNodeTypes {
JetNodeType TUPLE = new JetNodeType("TUPLE", JetTupleExpression.class); JetNodeType TUPLE = new JetNodeType("TUPLE", JetTupleExpression.class);
JetNodeType PARENTHESIZED = new JetNodeType("PARENTHESIZED", JetParenthesizedExpression.class); JetNodeType PARENTHESIZED = new JetNodeType("PARENTHESIZED", JetParenthesizedExpression.class);
JetNodeType TYPEOF = new JetNodeType("TYPEOF", JetTypeofExpression.class); JetNodeType TYPEOF = new JetNodeType("TYPEOF", JetTypeofExpression.class);
JetNodeType NEW = new JetNodeType("NEW", JetNewExpression.class); // JetNodeType NEW = new JetNodeType("NEW", JetNewExpression.class);
JetNodeType RETURN = new JetNodeType("RETURN", JetReturnExpression.class); JetNodeType RETURN = new JetNodeType("RETURN", JetReturnExpression.class);
JetNodeType THROW = new JetNodeType("THROW", JetThrowExpression.class); JetNodeType THROW = new JetNodeType("THROW", JetThrowExpression.class);
JetNodeType CONTINUE = new JetNodeType("CONTINUE", JetContinueExpression.class); JetNodeType CONTINUE = new JetNodeType("CONTINUE", JetContinueExpression.class);
@@ -673,7 +673,10 @@ public class ExpressionCodegen extends JetVisitor {
if (callee instanceof JetSimpleNameExpression) { if (callee instanceof JetSimpleNameExpression) {
DeclarationDescriptor funDescriptor = bindingContext.resolveReferenceExpression((JetSimpleNameExpression) callee); DeclarationDescriptor funDescriptor = bindingContext.resolveReferenceExpression((JetSimpleNameExpression) callee);
if (funDescriptor instanceof FunctionDescriptor) { if (funDescriptor instanceof ConstructorDescriptor) {
generateConstructorCall(expression, (JetSimpleNameExpression) callee);
}
else if (funDescriptor instanceof FunctionDescriptor) {
final DeclarationDescriptor functionParent = funDescriptor.getContainingDeclaration(); final DeclarationDescriptor functionParent = funDescriptor.getContainingDeclaration();
if (isNumberPrimitive(functionParent)) { if (isNumberPrimitive(functionParent)) {
if (funDescriptor.getName().equals("inv")) { if (funDescriptor.getName().equals("inv")) {
@@ -1322,11 +1325,7 @@ public class ExpressionCodegen extends JetVisitor {
} }
} }
@Override private void generateConstructorCall(JetCallExpression expression, JetSimpleNameExpression constructorReference) {
public void visitNewExpression(JetNewExpression expression) {
JetTypeReference typeReference = expression.getTypeReference();
final JetUserType constructorType = (JetUserType) typeReference.getTypeElement();
final JetSimpleNameExpression constructorReference = constructorType.getReferenceExpression();
DeclarationDescriptor constructorDescriptor = bindingContext.resolveReferenceExpression(constructorReference); DeclarationDescriptor constructorDescriptor = bindingContext.resolveReferenceExpression(constructorReference);
final PsiElement declaration = bindingContext.getDeclarationPsiElement(constructorDescriptor); final PsiElement declaration = bindingContext.getDeclarationPsiElement(constructorDescriptor);
Type type; Type type;
@@ -1334,7 +1333,7 @@ public class ExpressionCodegen extends JetVisitor {
type = generateJavaConstructorCall(expression, (PsiMethod) declaration); type = generateJavaConstructorCall(expression, (PsiMethod) declaration);
} }
else if (constructorDescriptor instanceof ConstructorDescriptor) { else if (constructorDescriptor instanceof ConstructorDescriptor) {
type = typeMapper.mapType(bindingContext.resolveTypeReference(typeReference), OwnerKind.IMPLEMENTATION); type = typeMapper.mapType(bindingContext.getExpressionType(expression), OwnerKind.IMPLEMENTATION);
if (type.getSort() == Type.ARRAY) { if (type.getSort() == Type.ARRAY) {
generateNewArray(expression, type); generateNewArray(expression, type);
} }
@@ -1350,8 +1349,8 @@ public class ExpressionCodegen extends JetVisitor {
Method method = typeMapper.mapConstructorSignature((ConstructorDescriptor) constructorDescriptor, OwnerKind.IMPLEMENTATION); Method method = typeMapper.mapConstructorSignature((ConstructorDescriptor) constructorDescriptor, OwnerKind.IMPLEMENTATION);
pushMethodArguments(expression, method); pushMethodArguments(expression, method);
for (JetTypeReference typeArgumentReference : constructorType.getTypeArgumentsAsTypes()) { for (JetTypeProjection jetTypeArgument : expression.getTypeArguments()) {
JetType typeArgument = bindingContext.resolveTypeReference(typeArgumentReference); JetType typeArgument = bindingContext.resolveTypeReference(jetTypeArgument.getTypeReference());
// TODO is the makeNullable() call correct here? // TODO is the makeNullable() call correct here?
ClassCodegen.newTypeInfo(v, typeMapper.mapType(TypeUtils.makeNullable(typeArgument))); ClassCodegen.newTypeInfo(v, typeMapper.mapType(TypeUtils.makeNullable(typeArgument)));
} }
@@ -1371,7 +1370,7 @@ public class ExpressionCodegen extends JetVisitor {
} }
} }
private Type generateJavaConstructorCall(JetNewExpression expression, PsiMethod constructor) { private Type generateJavaConstructorCall(JetCallExpression expression, PsiMethod constructor) {
PsiClass javaClass = constructor.getContainingClass(); PsiClass javaClass = constructor.getContainingClass();
Type type = JetTypeMapper.psiClassType(javaClass); Type type = JetTypeMapper.psiClassType(javaClass);
v.anew(type); v.anew(type);
@@ -1382,7 +1381,7 @@ public class ExpressionCodegen extends JetVisitor {
return type; return type;
} }
private void generateNewArray(JetNewExpression expression, Type type) { private void generateNewArray(JetCallExpression expression, Type type) {
List<JetArgument> args = expression.getValueArguments(); List<JetArgument> args = expression.getValueArguments();
if (args.size() != 1) { if (args.size() != 1) {
throw new CompilationException("array constructor requires one value argument"); throw new CompilationException("array constructor requires one value argument");
@@ -546,13 +546,13 @@ public class JetControlFlowProcessor {
builder.read(expression); builder.read(expression);
} }
@Override // @Override
public void visitNewExpression(JetNewExpression expression) { // public void visitNewExpression(JetNewExpression expression) {
// TODO : Instantiated class is loaded // // TODO : Instantiated class is loaded
// TODO : type arguments? // // TODO : type arguments?
visitCall(expression); // visitCall(expression);
builder.read(expression); // builder.read(expression);
} // }
@Override @Override
public void visitProperty(JetProperty property) { public void visitProperty(JetProperty property) {
@@ -18,7 +18,7 @@ public interface ClassDescriptor extends ClassifierDescriptor {
JetScope getMemberScope(List<TypeProjection> typeArguments); JetScope getMemberScope(List<TypeProjection> typeArguments);
@NotNull @NotNull
FunctionGroup getConstructors(List<TypeProjection> typeArguments); FunctionGroup getConstructors();
@Nullable @Nullable
ConstructorDescriptor getUnsubstitutedPrimaryConstructor(); ConstructorDescriptor getUnsubstitutedPrimaryConstructor();
@@ -37,10 +37,14 @@ public class ClassDescriptorImpl extends DeclarationDescriptorImpl implements Cl
this.memberDeclarations = memberDeclarations; this.memberDeclarations = memberDeclarations;
this.constructors = constructors; this.constructors = constructors;
this.primaryConstructor = primaryConstructor; this.primaryConstructor = primaryConstructor;
assert !constructors.isEmpty() || primaryConstructor == null; // assert !constructors.isEmpty() || primaryConstructor == null;
return this; return this;
} }
public void setPrimaryConstructor(@NotNull ConstructorDescriptor primaryConstructor) {
this.primaryConstructor = primaryConstructor;
}
@Override @Override
@NotNull @NotNull
public TypeConstructor getTypeConstructor() { public TypeConstructor getTypeConstructor() {
@@ -66,13 +70,13 @@ public class ClassDescriptorImpl extends DeclarationDescriptorImpl implements Cl
@NotNull @NotNull
@Override @Override
public FunctionGroup getConstructors(List<TypeProjection> typeArguments) { public FunctionGroup getConstructors() {
assert typeArguments.size() == getTypeConstructor().getParameters().size() : "Argument list length mismatch for " + getName(); // assert typeArguments.size() == getTypeConstructor().getParameters().size() : "Argument list length mismatch for " + getName();
if (typeArguments.size() == 0) { // if (typeArguments.size() == 0) {
return constructors; // return constructors;
} // }
Map<TypeConstructor, TypeProjection> substitutionContext = TypeUtils.buildSubstitutionContext(getTypeConstructor().getParameters(), typeArguments); // Map<TypeConstructor, TypeProjection> substitutionContext = TypeUtils.buildSubstitutionContext(getTypeConstructor().getParameters(), typeArguments);
return new LazySubstitutingFunctionGroup(TypeSubstitutor.create(substitutionContext), constructors); return constructors;// LazySubstitutingFunctionGroup(TypeSubstitutor.create(substitutionContext), constructors);
} }
@NotNull @NotNull
@@ -32,8 +32,8 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements
return super.initialize(null, typeParameters, unsubstitutedValueParameters, unsubstitutedReturnType); return super.initialize(null, typeParameters, unsubstitutedValueParameters, unsubstitutedReturnType);
} }
public ConstructorDescriptor initialize(@NotNull List<ValueParameterDescriptor> unsubstitutedValueParameters) { public ConstructorDescriptorImpl initialize(@NotNull List<TypeParameterDescriptor> typeParameters, @NotNull List<ValueParameterDescriptor> unsubstitutedValueParameters) {
super.initialize(null, Collections.<TypeParameterDescriptor>emptyList(), unsubstitutedValueParameters, null); super.initialize(null, typeParameters, unsubstitutedValueParameters, null);
return this; return this;
} }
@@ -59,12 +59,6 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements
return isPrimary; return isPrimary;
} }
@NotNull
@Override
public List<TypeParameterDescriptor> getTypeParameters() {
return Collections.emptyList();
}
@NotNull @NotNull
@Override @Override
public Set<? extends FunctionDescriptor> getOverriddenFunctions() { public Set<? extends FunctionDescriptor> getOverriddenFunctions() {
@@ -47,7 +47,7 @@ public class LazySubstitutingClassDescriptor implements ClassDescriptor {
@NotNull @NotNull
@Override @Override
public FunctionGroup getConstructors(List<TypeProjection> typeArguments) { public FunctionGroup getConstructors() {
throw new UnsupportedOperationException(); // TODO throw new UnsupportedOperationException(); // TODO
} }
@@ -66,8 +66,10 @@ public class MutableClassDescriptor extends MutableDeclarationDescriptor impleme
public void addConstructor(@NotNull ConstructorDescriptor constructorDescriptor) { public void addConstructor(@NotNull ConstructorDescriptor constructorDescriptor) {
assert constructorDescriptor.getContainingDeclaration() == this; assert constructorDescriptor.getContainingDeclaration() == this;
// assert constructorDescriptor.getTypeParameters().size() == getTypeConstructor().getParameters().size();
constructors.addFunction(constructorDescriptor); constructors.addFunction(constructorDescriptor);
if (defaultType != null) { if (defaultType != null) {
// constructorDescriptor.getTypeParameters().addAll(typeParameters);
((ConstructorDescriptorImpl) constructorDescriptor).setReturnType(getDefaultType()); ((ConstructorDescriptorImpl) constructorDescriptor).setReturnType(getDefaultType());
} }
} }
@@ -154,6 +156,7 @@ public class MutableClassDescriptor extends MutableDeclarationDescriptor impleme
supertypes); supertypes);
scopeForMemberResolution.setThisType(getDefaultType()); scopeForMemberResolution.setThisType(getDefaultType());
for (FunctionDescriptor functionDescriptor : constructors.getFunctionDescriptors()) { for (FunctionDescriptor functionDescriptor : constructors.getFunctionDescriptors()) {
// functionDescriptor.getTypeParameters().addAll(typeParameters);
((ConstructorDescriptorImpl) functionDescriptor).setReturnType(getDefaultType()); ((ConstructorDescriptorImpl) functionDescriptor).setReturnType(getDefaultType());
} }
} }
@@ -180,15 +183,16 @@ public class MutableClassDescriptor extends MutableDeclarationDescriptor impleme
@NotNull @NotNull
@Override @Override
public FunctionGroup getConstructors(List<TypeProjection> typeArguments) { public FunctionGroup getConstructors() {
// TODO : Duplicates ClassDescriptorImpl // TODO : Duplicates ClassDescriptorImpl
assert typeArguments.size() == getTypeConstructor().getParameters().size(); // assert typeArguments.size() == getTypeConstructor().getParameters().size();
if (typeArguments.size() == 0) { // if (typeArguments.size() == 0) {
return constructors; // return constructors;
} // }
Map<TypeConstructor, TypeProjection> substitutionContext = TypeUtils.buildSubstitutionContext(getTypeConstructor().getParameters(), typeArguments); // Map<TypeConstructor, TypeProjection> substitutionContext = TypeUtils.buildSubstitutionContext(getTypeConstructor().getParameters(), typeArguments);
return new LazySubstitutingFunctionGroup(TypeSubstitutor.create(substitutionContext), constructors); // return new LazySubstitutingFunctionGroup(TypeSubstitutor.create(substitutionContext), constructors);
return constructors;
} }
@NotNull @NotNull
@@ -22,7 +22,8 @@ public class JetExpressionParsing extends AbstractJetParsing {
INTEGER_LITERAL, LONG_LITERAL, FLOAT_LITERAL, CHARACTER_LITERAL, STRING_LITERAL, RAW_STRING_LITERAL, INTEGER_LITERAL, LONG_LITERAL, FLOAT_LITERAL, CHARACTER_LITERAL, STRING_LITERAL, RAW_STRING_LITERAL,
NAMESPACE_KEYWORD, AS_KEYWORD, TYPE_KEYWORD, CLASS_KEYWORD, THIS_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, NAMESPACE_KEYWORD, AS_KEYWORD, TYPE_KEYWORD, CLASS_KEYWORD, THIS_KEYWORD, VAL_KEYWORD, VAR_KEYWORD,
FUN_KEYWORD, EXTENSION_KEYWORD, FOR_KEYWORD, NULL_KEYWORD, TYPEOF_KEYWORD, FUN_KEYWORD, EXTENSION_KEYWORD, FOR_KEYWORD, NULL_KEYWORD, TYPEOF_KEYWORD,
NEW_KEYWORD, TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, // NEW_KEYWORD,
TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD,
CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD, TRY_KEYWORD, ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD, TRY_KEYWORD, ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD,
WHEN_KEYWORD, RBRACKET, RBRACE, RPAR, PLUSPLUS, MINUSMINUS, MUL, PLUS, MINUS, EXCL, DIV, PERC, LTEQ, WHEN_KEYWORD, RBRACKET, RBRACE, RPAR, PLUSPLUS, MINUSMINUS, MUL, PLUS, MINUS, EXCL, DIV, PERC, LTEQ,
// TODO GTEQ, foo<bar, baz>=x // TODO GTEQ, foo<bar, baz>=x
@@ -54,7 +55,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
WHEN_KEYWORD, // when WHEN_KEYWORD, // when
TRY_KEYWORD, // try TRY_KEYWORD, // try
TYPEOF_KEYWORD, // typeof TYPEOF_KEYWORD, // typeof
NEW_KEYWORD, // new // NEW_KEYWORD, // new
OBJECT_KEYWORD, // object OBJECT_KEYWORD, // object
// jump // jump
@@ -497,9 +498,9 @@ public class JetExpressionParsing extends AbstractJetParsing {
else if (at(TYPEOF_KEYWORD)) { else if (at(TYPEOF_KEYWORD)) {
parseTypeOf(); parseTypeOf();
} }
else if (at(NEW_KEYWORD)) { // else if (at(NEW_KEYWORD)) {
parseNew(); // parseNew();
} // }
else if (at(OBJECT_KEYWORD)) { else if (at(OBJECT_KEYWORD)) {
parseObjectLiteral(); parseObjectLiteral();
} }
@@ -1446,23 +1447,23 @@ public class JetExpressionParsing extends AbstractJetParsing {
marker.done(THROW); marker.done(THROW);
} }
/* // /*
* "new" constructorInvocation // identical to new functionCall // * "new" constructorInvocation // identical to new functionCall
* // *
* constructorInvocation // * constructorInvocation
* : userType callSuffix // * : userType callSuffix
*/ // */
private void parseNew() { // private void parseNew() {
assert _at(NEW_KEYWORD); // assert _at(NEW_KEYWORD);
//
PsiBuilder.Marker creation = mark(); // PsiBuilder.Marker creation = mark();
advance(); // NEW_KEYWORD // advance(); // NEW_KEYWORD
//
myJetParsing.parseTypeRef(); // myJetParsing.parseTypeRef();
parseCallSuffix(); // parseCallSuffix();
//
creation.done(NEW); // creation.done(NEW);
} // }
/* /*
* "typeof" "(" element ")" * "typeof" "(" element ")"
@@ -41,6 +41,14 @@ public class JetDelegatorToSuperCall extends JetDelegationSpecifier implements J
@NotNull @NotNull
@Override @Override
public List<JetTypeProjection> getTypeArguments() { public List<JetTypeProjection> getTypeArguments() {
JetTypeReference typeReference = getTypeReference();
if (typeReference != null) {
JetTypeElement typeElement = typeReference.getTypeElement();
if (typeElement instanceof JetUserType) {
JetUserType userType = (JetUserType) typeElement;
return userType.getTypeArguments();
}
}
return Collections.emptyList(); return Collections.emptyList();
} }
@@ -1,60 +1,52 @@
package org.jetbrains.jet.lang.psi; package org.jetbrains.jet.lang.psi;
import com.intellij.lang.ASTNode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.JetNodeTypes;
import java.util.Collections;
import java.util.List;
/** /**
* @author max * @author max
*/ */
public class JetNewExpression extends JetExpression implements JetCall { //public class JetNewExpression extends JetExpression implements JetCall {
public JetNewExpression(@NotNull ASTNode node) { // public JetNewExpression(@NotNull ASTNode node) {
super(node); // super(node);
} // }
//
@Override // @Override
public void accept(JetVisitor visitor) { // public void accept(JetVisitor visitor) {
visitor.visitNewExpression(this); // visitor.visitNewExpression(this);
} // }
//
@Nullable @IfNotParsed // @Nullable @IfNotParsed
public JetTypeReference getTypeReference() { // public JetTypeReference getTypeReference() {
return (JetTypeReference) findChildByType(JetNodeTypes.TYPE_REFERENCE); // return (JetTypeReference) findChildByType(JetNodeTypes.TYPE_REFERENCE);
} // }
//
@Override // @Override
@Nullable // @Nullable
public JetArgumentList getValueArgumentList() { // public JetArgumentList getValueArgumentList() {
return (JetArgumentList) findChildByType(JetNodeTypes.VALUE_ARGUMENT_LIST); // return (JetArgumentList) findChildByType(JetNodeTypes.VALUE_ARGUMENT_LIST);
} // }
//
@Override // @Override
@NotNull // @NotNull
public List<JetArgument> getValueArguments() { // public List<JetArgument> getValueArguments() {
JetArgumentList list = getValueArgumentList(); // JetArgumentList list = getValueArgumentList();
return list != null ? list.getArguments() : Collections.<JetArgument>emptyList(); // return list != null ? list.getArguments() : Collections.<JetArgument>emptyList();
} // }
//
@Override // @Override
@NotNull // @NotNull
public List<JetExpression> getFunctionLiteralArguments() { // public List<JetExpression> getFunctionLiteralArguments() {
return findChildrenByType(JetNodeTypes.FUNCTION_LITERAL); // return findChildrenByType(JetNodeTypes.FUNCTION_LITERAL);
} // }
//
@NotNull // @NotNull
@Override // @Override
public List<JetTypeProjection> getTypeArguments() { // public List<JetTypeProjection> getTypeArguments() {
return Collections.emptyList(); // return Collections.emptyList();
} // }
//
@NotNull // @NotNull
@Override // @Override
public JetElement asElement() { // public JetElement asElement() {
return this; // return this;
} // }
//
} //}
@@ -174,10 +174,10 @@ public class JetVisitor extends PsiElementVisitor {
visitExpression(expression); visitExpression(expression);
} }
public void visitNewExpression(JetNewExpression expression) { // public void visitNewExpression(JetNewExpression expression) {
visitExpression(expression); // visitExpression(expression);
} // }
//
public void visitReturnExpression(JetReturnExpression expression) { public void visitReturnExpression(JetReturnExpression expression) {
visitLabelQualifiedExpression(expression); visitLabelQualifiedExpression(expression);
} }
@@ -96,21 +96,26 @@ public class ClassDescriptorResolver {
} }
WritableFunctionGroup constructors = new WritableFunctionGroup("<init>"); WritableFunctionGroup constructors = new WritableFunctionGroup("<init>");
for (JetConstructor constructor : classElement.getSecondaryConstructors()) { classDescriptor.initialize(
constructors.addFunction(resolveSecondaryConstructorDescriptor(memberDeclarations, classDescriptor, constructor));
}
ConstructorDescriptor primaryConstructorDescriptor = resolvePrimaryConstructorDescriptor(scope, classDescriptor, classElement);
if (primaryConstructorDescriptor != null) {
constructors.addFunction(primaryConstructorDescriptor);
}
return classDescriptor.initialize(
!open, !open,
typeParameters, typeParameters,
supertypes, supertypes,
memberDeclarations, memberDeclarations,
constructors, constructors,
primaryConstructorDescriptor null
); );
for (JetConstructor constructor : classElement.getSecondaryConstructors()) {
ConstructorDescriptorImpl functionDescriptor = resolveSecondaryConstructorDescriptor(memberDeclarations, classDescriptor, constructor);
functionDescriptor.setReturnType(classDescriptor.getDefaultType());
constructors.addFunction(functionDescriptor);
}
ConstructorDescriptorImpl primaryConstructorDescriptor = resolvePrimaryConstructorDescriptor(scope, classDescriptor, classElement);
if (primaryConstructorDescriptor != null) {
primaryConstructorDescriptor.setReturnType(classDescriptor.getDefaultType());
constructors.addFunction(primaryConstructorDescriptor);
classDescriptor.setPrimaryConstructor(primaryConstructorDescriptor);
}
return classDescriptor;
} }
public void resolveMutableClassDescriptor(@NotNull JetClass classElement, @NotNull MutableClassDescriptor descriptor) { public void resolveMutableClassDescriptor(@NotNull JetClass classElement, @NotNull MutableClassDescriptor descriptor) {
@@ -616,18 +621,18 @@ public class ClassDescriptorResolver {
} }
@NotNull @NotNull
public ConstructorDescriptor resolveSecondaryConstructorDescriptor(@NotNull JetScope scope, @NotNull ClassDescriptor classDescriptor, @NotNull JetConstructor constructor) { public ConstructorDescriptorImpl resolveSecondaryConstructorDescriptor(@NotNull JetScope scope, @NotNull ClassDescriptor classDescriptor, @NotNull JetConstructor constructor) {
return createConstructorDescriptor(scope, classDescriptor, false, constructor.getModifierList(), constructor, constructor.getParameters()); return createConstructorDescriptor(scope, classDescriptor, false, constructor.getModifierList(), constructor, classDescriptor.getTypeConstructor().getParameters(), constructor.getParameters());
} }
@NotNull @NotNull
private ConstructorDescriptor createConstructorDescriptor( private ConstructorDescriptorImpl createConstructorDescriptor(
@NotNull JetScope scope, @NotNull JetScope scope,
@NotNull ClassDescriptor classDescriptor, @NotNull ClassDescriptor classDescriptor,
boolean isPrimary, boolean isPrimary,
@Nullable JetModifierList modifierList, @Nullable JetModifierList modifierList,
@NotNull JetDeclaration declarationToTrace, @NotNull JetDeclaration declarationToTrace,
@NotNull List<JetParameter> valueParameters) { List<TypeParameterDescriptor> typeParameters, @NotNull List<JetParameter> valueParameters) {
ConstructorDescriptorImpl constructorDescriptor = new ConstructorDescriptorImpl( ConstructorDescriptorImpl constructorDescriptor = new ConstructorDescriptorImpl(
classDescriptor, classDescriptor,
AnnotationResolver.INSTANCE.resolveAnnotations(modifierList), AnnotationResolver.INSTANCE.resolveAnnotations(modifierList),
@@ -635,6 +640,7 @@ public class ClassDescriptorResolver {
); );
trace.recordDeclarationResolution(declarationToTrace, constructorDescriptor); trace.recordDeclarationResolution(declarationToTrace, constructorDescriptor);
return constructorDescriptor.initialize( return constructorDescriptor.initialize(
typeParameters,
resolveValueParameters( resolveValueParameters(
constructorDescriptor, constructorDescriptor,
new WritableScopeImpl(scope, classDescriptor, trace.getErrorHandler()), new WritableScopeImpl(scope, classDescriptor, trace.getErrorHandler()),
@@ -642,7 +648,7 @@ public class ClassDescriptorResolver {
} }
@Nullable @Nullable
public ConstructorDescriptor resolvePrimaryConstructorDescriptor(@NotNull JetScope scope, @NotNull ClassDescriptor classDescriptor, @NotNull JetClass classElement) { public ConstructorDescriptorImpl resolvePrimaryConstructorDescriptor(@NotNull JetScope scope, @NotNull ClassDescriptor classDescriptor, @NotNull JetClass classElement) {
if (!classElement.hasPrimaryConstructor()) return null; if (!classElement.hasPrimaryConstructor()) return null;
return createConstructorDescriptor( return createConstructorDescriptor(
scope, scope,
@@ -650,7 +656,7 @@ public class ClassDescriptorResolver {
true, true,
classElement.getPrimaryConstructorModifierList(), classElement.getPrimaryConstructorModifierList(),
classElement, classElement,
classElement.getPrimaryConstructorParameters()); classDescriptor.getTypeConstructor().getParameters(), classElement.getPrimaryConstructorParameters());
} }
@NotNull @NotNull
@@ -227,7 +227,7 @@ public class TopDownAnalyzer {
private void createPrimaryConstructor(MutableClassDescriptor mutableClassDescriptor) { private void createPrimaryConstructor(MutableClassDescriptor mutableClassDescriptor) {
ConstructorDescriptorImpl constructorDescriptor = new ConstructorDescriptorImpl(mutableClassDescriptor, Collections.<Annotation>emptyList(), true); ConstructorDescriptorImpl constructorDescriptor = new ConstructorDescriptorImpl(mutableClassDescriptor, Collections.<Annotation>emptyList(), true);
constructorDescriptor.initialize(Collections.<ValueParameterDescriptor>emptyList()); constructorDescriptor.initialize(Collections.<TypeParameterDescriptor>emptyList(), Collections.<ValueParameterDescriptor>emptyList());
// TODO : make the constructor private? // TODO : make the constructor private?
mutableClassDescriptor.setPrimaryConstructor(constructorDescriptor); mutableClassDescriptor.setPrimaryConstructor(constructorDescriptor);
} }
@@ -146,9 +146,30 @@ public class WritableScopeImpl extends WritableScopeWithImports {
@NotNull @NotNull
public FunctionGroup getFunctionGroup(@NotNull String name) { public FunctionGroup getFunctionGroup(@NotNull String name) {
FunctionGroup functionGroup = getFunctionGroups().get(name); FunctionGroup functionGroup = getFunctionGroups().get(name);
FunctionGroup constructors = null;
ClassifierDescriptor classifier = getClassifier(name);
if (classifier instanceof ClassDescriptor) {
ClassDescriptor classDescriptor = (ClassDescriptor) classifier;
constructors = classDescriptor.getConstructors();
}
if (functionGroup != null && !functionGroup.isEmpty()) { if (functionGroup != null && !functionGroup.isEmpty()) {
if (constructors != null) {
WritableFunctionGroup result = new WritableFunctionGroup(name);
for (FunctionDescriptor functionDescriptor : functionGroup.getFunctionDescriptors()) {
result.addFunction(functionDescriptor);
}
for (FunctionDescriptor functionDescriptor : constructors.getFunctionDescriptors()) {
result.addFunction(functionDescriptor);
}
return result;
}
return functionGroup; return functionGroup;
} }
if (constructors != null && !constructors.isEmpty()) {
return constructors;
}
// TODO : this logic is questionable // TODO : this logic is questionable
functionGroup = getWorkerScope().getFunctionGroup(name); functionGroup = getWorkerScope().getFunctionGroup(name);
if (!functionGroup.isEmpty()) return functionGroup; if (!functionGroup.isEmpty()) return functionGroup;
@@ -69,10 +69,11 @@ public class JavaClassDescriptor extends MutableDeclarationDescriptor implements
@NotNull @NotNull
@Override @Override
public FunctionGroup getConstructors(List<TypeProjection> typeArguments) { public FunctionGroup getConstructors() {
assert typeArguments.size() == typeConstructor.getParameters().size(); // assert typeArguments.size() == typeConstructor.getParameters().size();
if (typeArguments.isEmpty()) return constructors; // if (typeArguments.isEmpty()) return constructors;
return new LazySubstitutingFunctionGroup(createTypeSubstitutor(typeArguments), constructors); // return new LazySubstitutingFunctionGroup(createTypeSubstitutor(typeArguments), constructors);
return constructors;
} }
@Override @Override
@@ -92,13 +92,14 @@ public class JavaDescriptorResolver {
classDescriptor.setName(name); classDescriptor.setName(name);
List<JetType> supertypes = new ArrayList<JetType>(); List<JetType> supertypes = new ArrayList<JetType>();
List<TypeParameterDescriptor> typeParameters = resolveTypeParameters(classDescriptor, psiClass.getTypeParameters());
classDescriptor.setTypeConstructor(new TypeConstructorImpl( classDescriptor.setTypeConstructor(new TypeConstructorImpl(
classDescriptor, classDescriptor,
Collections.<Annotation>emptyList(), // TODO Collections.<Annotation>emptyList(), // TODO
// TODO // TODO
psiClass.hasModifierProperty(PsiModifier.FINAL), psiClass.hasModifierProperty(PsiModifier.FINAL),
name, name,
resolveTypeParameters(classDescriptor, psiClass.getTypeParameters()), typeParameters,
supertypes supertypes
)); ));
@@ -116,7 +117,7 @@ public class JavaDescriptorResolver {
classDescriptor, classDescriptor,
Collections.<Annotation>emptyList(), Collections.<Annotation>emptyList(),
false); false);
constructorDescriptor.initialize(Collections.<ValueParameterDescriptor>emptyList()); constructorDescriptor.initialize(typeParameters, Collections.<ValueParameterDescriptor>emptyList());
constructorDescriptor.setReturnType(classDescriptor.getDefaultType()); constructorDescriptor.setReturnType(classDescriptor.getDefaultType());
classDescriptor.addConstructor(constructorDescriptor); classDescriptor.addConstructor(constructorDescriptor);
semanticServices.getTrace().recordDeclarationResolution(psiClass, constructorDescriptor); semanticServices.getTrace().recordDeclarationResolution(psiClass, constructorDescriptor);
@@ -128,7 +129,7 @@ public class JavaDescriptorResolver {
classDescriptor, classDescriptor,
Collections.<Annotation>emptyList(), // TODO Collections.<Annotation>emptyList(), // TODO
false); false);
constructorDescriptor.initialize(resolveParameterDescriptors(constructorDescriptor, constructor.getParameterList().getParameters())); constructorDescriptor.initialize(typeParameters, resolveParameterDescriptors(constructorDescriptor, constructor.getParameterList().getParameters()));
constructorDescriptor.setReturnType(classDescriptor.getDefaultType()); constructorDescriptor.setReturnType(classDescriptor.getDefaultType());
classDescriptor.addConstructor(constructorDescriptor); classDescriptor.addConstructor(constructorDescriptor);
semanticServices.getTrace().recordDeclarationResolution(constructor, constructorDescriptor); semanticServices.getTrace().recordDeclarationResolution(constructor, constructorDescriptor);
@@ -1,10 +1,8 @@
package org.jetbrains.jet.lang.resolve.java; package org.jetbrains.jet.lang.resolve.java;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.resolve.JetScopeImpl; import org.jetbrains.jet.lang.resolve.JetScopeImpl;
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
/** /**
* @author abreslav * @author abreslav
@@ -31,6 +29,17 @@ public class JavaPackageScope extends JetScopeImpl {
return semanticServices.getDescriptorResolver().resolveNamespace(getQualifiedName(name)); return semanticServices.getDescriptorResolver().resolveNamespace(getQualifiedName(name));
} }
@NotNull
@Override
public FunctionGroup getFunctionGroup(@NotNull String name) {
ClassifierDescriptor classifier = getClassifier(name);
if (classifier instanceof ClassDescriptor) {
ClassDescriptor classDescriptor = (ClassDescriptor) classifier;
return classDescriptor.getConstructors();
}
return FunctionGroup.EMPTY;
}
@NotNull @NotNull
@Override @Override
public DeclarationDescriptor getContainingDeclaration() { public DeclarationDescriptor getContainingDeclaration() {
@@ -95,7 +95,7 @@ public class ErrorUtils {
private static final ClassDescriptorImpl ERROR_CLASS = new ClassDescriptorImpl(ERROR_MODULE, Collections.<Annotation>emptyList(), "<ERROR CLASS>") { private static final ClassDescriptorImpl ERROR_CLASS = new ClassDescriptorImpl(ERROR_MODULE, Collections.<Annotation>emptyList(), "<ERROR CLASS>") {
@NotNull @NotNull
@Override @Override
public FunctionGroup getConstructors(List<TypeProjection> typeArguments) { public FunctionGroup getConstructors() {
return ERROR_FUNCTION_GROUP; return ERROR_FUNCTION_GROUP;
} }
}; };
@@ -553,7 +553,7 @@ public class JetTypeInferrer {
projectionsStripped.add(typeArgument); projectionsStripped.add(typeArgument);
} }
FunctionGroup constructors = classDescriptor.getConstructors(projectionsStripped); FunctionGroup constructors = classDescriptor.getConstructors();
OverloadDomain constructorsOverloadDomain = semanticServices.getOverloadResolver().getOverloadDomain(null, constructors); OverloadDomain constructorsOverloadDomain = semanticServices.getOverloadResolver().getOverloadDomain(null, constructors);
JetType constructorReturnedType = resolveCall( JetType constructorReturnedType = resolveCall(
scope, scope,
@@ -1691,14 +1691,14 @@ public class JetTypeInferrer {
return true; return true;
} }
@Override // @Override
public void visitNewExpression(JetNewExpression expression) { // public void visitNewExpression(JetNewExpression expression) {
// TODO : type argument inference // // TODO : type argument inference
JetTypeReference typeReference = expression.getTypeReference(); // JetTypeReference typeReference = expression.getTypeReference();
if (typeReference != null) { // if (typeReference != null) {
result = checkConstructorCall(scope, typeReference, expression); // result = checkConstructorCall(scope, typeReference, expression);
} // }
} // }
@Override @Override
public void visitHashQualifiedExpression(JetHashQualifiedExpression expression) { public void visitHashQualifiedExpression(JetHashQualifiedExpression expression) {
@@ -177,7 +177,7 @@ public class TypeUtils {
@NotNull @NotNull
public static JetType makeUnsubstitutedType(ClassDescriptor classDescriptor, JetScope unsubstitutedMemberScope) { public static JetType makeUnsubstitutedType(ClassDescriptor classDescriptor, JetScope unsubstitutedMemberScope) {
List<TypeProjection> arguments = getArguments(classDescriptor); List<TypeProjection> arguments = getDefaultArguments(classDescriptor.getTypeConstructor().getParameters());
return new JetTypeImpl( return new JetTypeImpl(
Collections.<Annotation>emptyList(), Collections.<Annotation>emptyList(),
classDescriptor.getTypeConstructor(), classDescriptor.getTypeConstructor(),
@@ -188,9 +188,9 @@ public class TypeUtils {
} }
@NotNull @NotNull
private static List<TypeProjection> getArguments(@NotNull ClassDescriptor classDescriptor) { public static List<TypeProjection> getDefaultArguments(List<TypeParameterDescriptor> parameters) {
List<TypeProjection> result = new ArrayList<TypeProjection>(); List<TypeProjection> result = new ArrayList<TypeProjection>();
for (TypeParameterDescriptor parameterDescriptor : classDescriptor.getTypeConstructor().getParameters()) { for (TypeParameterDescriptor parameterDescriptor : parameters) {
result.add(new TypeProjection(parameterDescriptor.getDefaultType())); result.add(new TypeProjection(parameterDescriptor.getDefaultType()));
} }
return result; return result;
+1 -1
View File
@@ -114,7 +114,7 @@ RAW_STRING_LITERAL = {THREE_QUO} {QUO_STRING_CHAR}* {THREE_QUO}?
<YYINITIAL> "var" { return JetTokens.VAR_KEYWORD ;} <YYINITIAL> "var" { return JetTokens.VAR_KEYWORD ;}
<YYINITIAL> "fun" { return JetTokens.FUN_KEYWORD ;} <YYINITIAL> "fun" { return JetTokens.FUN_KEYWORD ;}
<YYINITIAL> "for" { return JetTokens.FOR_KEYWORD ;} <YYINITIAL> "for" { return JetTokens.FOR_KEYWORD ;}
<YYINITIAL> "new" { return JetTokens.NEW_KEYWORD ;} //<YYINITIAL> "new" { return JetTokens.NEW_KEYWORD ;}
<YYINITIAL> "is" { return JetTokens.IS_KEYWORD ;} <YYINITIAL> "is" { return JetTokens.IS_KEYWORD ;}
<YYINITIAL> "in" { return JetTokens.IN_KEYWORD ;} <YYINITIAL> "in" { return JetTokens.IN_KEYWORD ;}
<YYINITIAL> "if" { return JetTokens.IF_KEYWORD ;} <YYINITIAL> "if" { return JetTokens.IF_KEYWORD ;}
@@ -35,7 +35,7 @@ public interface JetTokens {
JetKeywordToken FOR_KEYWORD = JetKeywordToken.keyword("for"); JetKeywordToken FOR_KEYWORD = JetKeywordToken.keyword("for");
JetKeywordToken NULL_KEYWORD = JetKeywordToken.keyword("null"); JetKeywordToken NULL_KEYWORD = JetKeywordToken.keyword("null");
JetKeywordToken TYPEOF_KEYWORD = JetKeywordToken.keyword("typeof"); JetKeywordToken TYPEOF_KEYWORD = JetKeywordToken.keyword("typeof");
JetKeywordToken NEW_KEYWORD = JetKeywordToken.keyword("new"); // JetKeywordToken NEW_KEYWORD = JetKeywordToken.keyword("new");
JetKeywordToken TRUE_KEYWORD = JetKeywordToken.keyword("true"); JetKeywordToken TRUE_KEYWORD = JetKeywordToken.keyword("true");
JetKeywordToken FALSE_KEYWORD = JetKeywordToken.keyword("false"); JetKeywordToken FALSE_KEYWORD = JetKeywordToken.keyword("false");
JetKeywordToken IS_KEYWORD = JetKeywordToken.keyword("is"); JetKeywordToken IS_KEYWORD = JetKeywordToken.keyword("is");
@@ -139,7 +139,9 @@ public interface JetTokens {
TokenSet KEYWORDS = TokenSet.create(NAMESPACE_KEYWORD, AS_KEYWORD, TYPE_KEYWORD, CLASS_KEYWORD, TokenSet KEYWORDS = TokenSet.create(NAMESPACE_KEYWORD, AS_KEYWORD, TYPE_KEYWORD, CLASS_KEYWORD,
THIS_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, EXTENSION_KEYWORD, FOR_KEYWORD, THIS_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, EXTENSION_KEYWORD, FOR_KEYWORD,
NULL_KEYWORD, TYPEOF_KEYWORD, NEW_KEYWORD, TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD, NULL_KEYWORD, TYPEOF_KEYWORD,
// NEW_KEYWORD,
TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD,
IN_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD, IN_KEYWORD, THROW_KEYWORD, RETURN_KEYWORD, BREAK_KEYWORD, CONTINUE_KEYWORD, OBJECT_KEYWORD, IF_KEYWORD,
ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, TRY_KEYWORD, WHEN_KEYWORD, ELSE_KEYWORD, WHILE_KEYWORD, DO_KEYWORD, TRY_KEYWORD, WHEN_KEYWORD,
NOT_IN, NOT_IS, CAPITALIZED_THIS_KEYWORD NOT_IN, NOT_IS, CAPITALIZED_THIS_KEYWORD
+315 -322
View File
@@ -1,4 +1,4 @@
/* The following code was generated by JFlex 1.4.3 on 4/8/11 3:38 PM */ /* The following code was generated by JFlex 1.4.3 on 6/15/11 2:54 PM */
/* It's an automatically generated code. Do not modify it. */ /* It's an automatically generated code. Do not modify it. */
package org.jetbrains.jet.lexer; package org.jetbrains.jet.lexer;
@@ -13,7 +13,7 @@ import org.jetbrains.jet.lexer.JetTokens;
/** /**
* This class is a scanner generated by * This class is a scanner generated by
* <a href="http://www.jflex.de/">JFlex</a> 1.4.3 * <a href="http://www.jflex.de/">JFlex</a> 1.4.3
* on 4/8/11 3:38 PM from the specification file * on 6/15/11 2:54 PM from the specification file
* <tt>/Users/abreslav/work/jet/idea/src/org/jetbrains/jet/lexer/Jet.flex</tt> * <tt>/Users/abreslav/work/jet/idea/src/org/jetbrains/jet/lexer/Jet.flex</tt>
*/ */
class _JetLexer implements FlexLexer { class _JetLexer implements FlexLexer {
@@ -145,21 +145,20 @@ class _JetLexer implements FlexLexer {
"\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+ "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+
"\1\33\1\34\1\0\1\35\1\0\1\36\1\0\1\37"+ "\1\33\1\34\1\0\1\35\1\0\1\36\1\0\1\37"+
"\1\0\1\40\1\41\1\42\1\43\1\44\1\35\2\2"+ "\1\0\1\40\1\41\1\42\1\43\1\44\1\35\2\2"+
"\1\35\1\45\1\46\1\47\1\50\2\12\3\13\3\3"+ "\1\35\1\45\1\46\1\47\1\50\2\12\3\13\2\3"+
"\1\51\7\3\1\52\1\53\1\54\11\3\1\55\1\56"+ "\1\51\7\3\1\52\1\53\1\54\11\3\1\55\1\56"+
"\1\57\1\0\1\60\1\61\1\62\1\63\1\64\1\65"+ "\1\57\1\0\1\60\1\61\1\62\1\63\1\64\1\65"+
"\1\66\1\67\1\70\1\71\1\72\1\35\1\3\2\0"+ "\1\66\1\67\1\70\1\71\1\72\1\35\1\3\2\0"+
"\1\42\1\73\4\0\1\13\1\74\1\3\1\75\1\3"+ "\1\42\1\73\4\0\1\13\1\74\2\3\1\75\5\3"+
"\1\76\5\3\1\77\6\3\1\100\1\101\4\3\1\102"+ "\1\76\6\3\1\77\1\100\4\3\1\101\1\102\1\103"+
"\1\103\1\104\1\105\1\106\1\107\1\36\1\37\1\0"+ "\1\104\1\105\1\106\1\36\1\37\1\0\2\73\1\35"+
"\2\73\1\35\2\0\1\3\1\110\1\3\1\111\2\3"+ "\2\0\1\3\1\107\1\3\1\110\2\3\1\111\1\112"+
"\1\112\1\113\1\114\5\3\1\115\1\3\1\116\1\42"+ "\1\113\5\3\1\114\1\3\1\115\1\42\2\0\3\3"+
"\2\0\3\3\1\117\1\3\1\120\2\3\1\121\1\122"+ "\1\116\1\3\1\117\2\3\1\120\1\121\1\122\1\74"+
"\1\123\1\74\3\3\1\124\1\125\1\126\5\3\1\127"+ "\3\3\1\123\1\124\1\125\5\3\1\126\1\127\1\130";
"\1\130\1\131";
private static int [] zzUnpackAction() { private static int [] zzUnpackAction() {
int [] result = new int[205]; int [] result = new int[203];
int offset = 0; int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result; return result;
@@ -194,25 +193,25 @@ class _JetLexer implements FlexLexer {
"\0\u0b6d\0\u0bae\0\101\0\101\0\u0bef\0\u0c30\0\u0c71\0\u0cb2"+ "\0\u0b6d\0\u0bae\0\101\0\101\0\u0bef\0\u0c30\0\u0c71\0\u0cb2"+
"\0\101\0\101\0\101\0\101\0\101\0\u0cf3\0\u0d34\0\u0d75"+ "\0\101\0\101\0\101\0\101\0\101\0\u0cf3\0\u0d34\0\u0d75"+
"\0\u0db6\0\u0df7\0\u0e38\0\u0e79\0\u0eba\0\u0efb\0\u0f3c\0\u0f7d"+ "\0\u0db6\0\u0df7\0\u0e38\0\u0e79\0\u0eba\0\u0efb\0\u0f3c\0\u0f7d"+
"\0\u0fbe\0\u0fff\0\u1040\0\u1081\0\303\0\303\0\303\0\u10c2"+ "\0\u0fbe\0\u0fff\0\u1040\0\303\0\303\0\303\0\u1081\0\u10c2"+
"\0\u1103\0\u1144\0\u1185\0\u11c6\0\u1207\0\u1248\0\u1289\0\u12ca"+ "\0\u1103\0\u1144\0\u1185\0\u11c6\0\u1207\0\u1248\0\u1289\0\303"+
"\0\303\0\u130b\0\101\0\u134c\0\u138d\0\101\0\101\0\101"+ "\0\u12ca\0\101\0\u130b\0\u134c\0\101\0\101\0\101\0\101"+
"\0\101\0\101\0\101\0\101\0\101\0\101\0\101\0\u13ce"+ "\0\101\0\101\0\101\0\101\0\101\0\101\0\u138d\0\101"+
"\0\101\0\u140f\0\u1450\0\u1491\0\u14d2\0\u1513\0\u1554\0\u1595"+ "\0\u13ce\0\u140f\0\u1450\0\u1491\0\u14d2\0\u1513\0\u1554\0\u1595"+
"\0\u15d6\0\101\0\u1617\0\u1658\0\303\0\u1699\0\101\0\u16da"+ "\0\101\0\u15d6\0\u1617\0\u1658\0\101\0\u1699\0\u16da\0\u171b"+
"\0\u171b\0\u175c\0\u179d\0\u17de\0\303\0\u181f\0\u1860\0\u18a1"+ "\0\u175c\0\u179d\0\303\0\u17de\0\u181f\0\u1860\0\u18a1\0\u18e2"+
"\0\u18e2\0\u1923\0\u1964\0\303\0\303\0\u19a5\0\u19e6\0\u1a27"+ "\0\u1923\0\303\0\303\0\u1964\0\u19a5\0\u19e6\0\u1a27\0\303"+
"\0\u1a68\0\303\0\303\0\101\0\101\0\101\0\101\0\101"+ "\0\303\0\101\0\101\0\101\0\101\0\101\0\101\0\u1a68"+
"\0\101\0\u1aa9\0\u1aea\0\101\0\u1b2b\0\u13ce\0\u1b6c\0\u1bad"+ "\0\u1aa9\0\101\0\u1aea\0\u138d\0\u1b2b\0\u1b6c\0\303\0\u1bad"+
"\0\303\0\u1bee\0\303\0\u1c2f\0\u1c70\0\303\0\u1cb1\0\303"+ "\0\303\0\u1bee\0\u1c2f\0\303\0\u1c70\0\303\0\u1cb1\0\u1cf2"+
"\0\u1cf2\0\u1d33\0\u1d74\0\u1db5\0\u1df6\0\303\0\u1e37\0\303"+ "\0\u1d33\0\u1d74\0\u1db5\0\303\0\u1df6\0\303\0\101\0\u1e37"+
"\0\101\0\u1e78\0\u1eb9\0\u1efa\0\u1f3b\0\u1f7c\0\303\0\u1fbd"+ "\0\u1e78\0\u1eb9\0\u1efa\0\u1f3b\0\303\0\u1f7c\0\303\0\u1fbd"+
"\0\303\0\u1ffe\0\u203f\0\303\0\303\0\303\0\101\0\u2080"+ "\0\u1ffe\0\303\0\303\0\303\0\101\0\u203f\0\u2080\0\u20c1"+
"\0\u20c1\0\u2102\0\303\0\303\0\303\0\u2143\0\u2184\0\u21c5"+ "\0\303\0\303\0\303\0\u2102\0\u2143\0\u2184\0\u21c5\0\u2206"+
"\0\u2206\0\u2247\0\303\0\303\0\303"; "\0\303\0\303\0\303";
private static int [] zzUnpackRowMap() { private static int [] zzUnpackRowMap() {
int [] result = new int[205]; int [] result = new int[203];
int offset = 0; int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result; return result;
@@ -259,200 +258,198 @@ class _JetLexer implements FlexLexer {
"\15\0\13\16\1\0\7\16\1\105\1\106\54\16\13\107"+ "\15\0\13\16\1\0\7\16\1\105\1\106\54\16\13\107"+
"\1\0\10\107\1\110\1\111\53\107\1\0\2\4\1\0"+ "\1\0\10\107\1\110\1\111\53\107\1\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+ "\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\1\4\1\112\1\4\1\113\7\4\1\114"+ "\1\4\3\0\1\4\1\112\11\4\1\113\14\4\24\0"+
"\14\4\24\0\2\4\1\0\2\4\1\0\1\4\4\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\3\4\1\0\1\4\1\0\1\4\3\0\4\4\1\115"+ "\1\4\1\0\1\4\3\0\4\4\1\114\23\4\24\0"+
"\23\4\24\0\2\4\1\0\2\4\1\0\1\4\4\0"+ "\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\3\4\1\0\1\4\1\0\1\4\3\0\7\4\1\116"+ "\1\4\1\0\1\4\3\0\7\4\1\115\13\4\1\116"+
"\13\4\1\117\4\4\24\0\2\4\1\0\2\4\1\0"+ "\4\4\24\0\2\4\1\0\2\4\1\0\1\4\4\0"+
"\3\4\1\0\1\4\1\0\1\4\3\0\12\4\1\117"+
"\10\4\1\120\4\4\24\0\2\4\1\0\2\4\1\0"+
"\1\4\4\0\3\4\1\0\1\4\1\0\1\4\3\0"+ "\1\4\4\0\3\4\1\0\1\4\1\0\1\4\3\0"+
"\12\4\1\120\10\4\1\121\4\4\24\0\2\4\1\0"+ "\14\4\1\121\1\122\4\4\1\123\5\4\24\0\2\4"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\4\3\0\14\4\1\122\1\123\4\4\1\124\5\4"+ "\1\0\1\4\3\0\1\124\3\4\1\125\11\4\1\126"+
"\24\0\2\4\1\0\2\4\1\0\1\4\4\0\3\4"+ "\11\4\24\0\2\4\1\0\2\4\1\0\1\4\4\0"+
"\1\0\1\4\1\0\1\4\3\0\1\125\3\4\1\126"+ "\3\4\1\0\1\4\1\0\1\4\3\0\17\4\1\127"+
"\11\4\1\127\11\4\24\0\2\4\1\0\2\4\1\0"+ "\10\4\24\0\2\4\1\0\2\4\1\0\1\4\4\0"+
"\3\4\1\0\1\4\1\0\1\4\3\0\3\4\1\130"+
"\24\4\24\0\2\4\1\0\2\4\1\0\1\4\4\0"+
"\3\4\1\0\1\4\1\0\1\4\3\0\1\4\1\131"+
"\10\4\1\132\1\133\14\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\14\4\1\134\13\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\22\4\1\135\5\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\22\4\1\136\5\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\1\4\1\137\26\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\12\4\1\140\15\4\101\0\1\141\4\0\1\142"+
"\54\0\1\143\16\0\1\144\41\0\1\145\46\0\1\146"+
"\70\0\1\147\2\0\1\150\75\0\1\151\100\0\1\152"+
"\106\0\1\153\101\0\1\154\71\0\1\155\23\0\1\100"+
"\12\0\1\100\2\0\1\156\62\0\1\157\12\0\1\157"+
"\4\0\1\157\37\0\1\157\20\0\2\63\1\0\2\63"+
"\1\160\1\63\4\0\3\63\1\0\1\63\1\0\1\63"+
"\3\0\30\63\24\0\2\64\1\0\2\64\1\0\1\64"+
"\4\0\3\64\1\0\1\64\1\0\1\64\3\0\30\64"+
"\25\0\1\161\1\0\1\161\2\0\1\161\5\0\2\161"+
"\1\0\1\161\1\0\1\161\3\0\30\161\24\0\2\66"+
"\1\0\2\66\1\0\1\66\4\0\3\66\1\0\1\66"+
"\1\0\1\66\3\0\30\66\25\0\1\162\1\0\1\162"+
"\2\0\1\162\5\0\2\162\1\0\1\162\1\0\1\162"+
"\3\0\30\162\23\0\13\71\1\0\65\71\12\163\1\164"+
"\66\163\1\0\1\75\12\0\1\75\2\0\1\165\1\62"+
"\10\0\1\62\50\0\2\76\11\0\1\76\1\0\1\76"+
"\1\166\1\76\1\0\1\167\4\0\1\76\1\0\1\76"+
"\1\0\1\167\1\76\7\0\2\76\7\0\1\76\24\0"+
"\1\77\12\0\1\77\2\0\1\170\62\0\1\100\12\0"+
"\1\100\3\0\1\62\10\0\1\62\47\0\13\16\1\0"+
"\65\16\13\107\1\0\10\107\1\110\1\171\66\107\1\0"+
"\65\107\25\0\1\172\54\0\2\4\1\0\2\4\1\0"+
"\1\4\4\0\3\4\1\0\1\4\1\0\1\4\3\0"+ "\1\4\4\0\3\4\1\0\1\4\1\0\1\4\3\0"+
"\17\4\1\130\10\4\24\0\2\4\1\0\2\4\1\0"+ "\2\4\1\173\25\4\24\0\2\4\1\0\2\4\1\0"+
"\1\4\4\0\3\4\1\0\1\4\1\0\1\4\3\0"+ "\1\4\4\0\3\4\1\0\1\4\1\0\1\4\3\0"+
"\3\4\1\131\24\4\24\0\2\4\1\0\2\4\1\0"+ "\23\4\1\174\4\4\24\0\2\4\1\0\2\4\1\0"+
"\1\4\4\0\3\4\1\0\1\4\1\0\1\4\3\0"+ "\1\4\4\0\3\4\1\0\1\4\1\0\1\4\3\0"+
"\1\4\1\132\10\4\1\133\1\134\14\4\24\0\2\4"+ "\30\4\2\0\1\175\21\0\2\4\1\0\2\4\1\0"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ "\1\4\4\0\3\4\1\0\1\4\1\0\1\4\3\0"+
"\1\0\1\4\3\0\14\4\1\135\13\4\24\0\2\4"+ "\10\4\1\176\17\4\24\0\2\4\1\0\2\4\1\0"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ "\1\4\4\0\3\4\1\0\1\4\1\0\1\4\3\0"+
"\1\0\1\4\3\0\22\4\1\136\5\4\24\0\2\4"+ "\4\4\1\177\23\4\24\0\2\4\1\0\2\4\1\0"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ "\1\4\4\0\3\4\1\0\1\4\1\0\1\4\3\0"+
"\1\0\1\4\3\0\22\4\1\137\5\4\24\0\2\4"+ "\1\200\27\4\24\0\2\4\1\0\2\4\1\0\1\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ "\4\0\3\4\1\0\1\4\1\0\1\4\3\0\1\4"+
"\1\0\1\4\3\0\1\4\1\140\26\4\24\0\2\4"+ "\1\201\26\4\24\0\2\4\1\0\2\4\1\0\1\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ "\4\0\3\4\1\0\1\4\1\0\1\4\3\0\13\4"+
"\1\0\1\4\3\0\12\4\1\141\15\4\101\0\1\142"+ "\1\202\1\4\1\203\12\4\24\0\2\4\1\0\2\4"+
"\4\0\1\143\54\0\1\144\16\0\1\145\41\0\1\146"+
"\46\0\1\147\70\0\1\150\2\0\1\151\75\0\1\152"+
"\100\0\1\153\106\0\1\154\101\0\1\155\71\0\1\156"+
"\23\0\1\100\12\0\1\100\2\0\1\157\62\0\1\160"+
"\12\0\1\160\4\0\1\160\37\0\1\160\20\0\2\63"+
"\1\0\2\63\1\161\1\63\4\0\3\63\1\0\1\63"+
"\1\0\1\63\3\0\30\63\24\0\2\64\1\0\2\64"+
"\1\0\1\64\4\0\3\64\1\0\1\64\1\0\1\64"+
"\3\0\30\64\25\0\1\162\1\0\1\162\2\0\1\162"+
"\5\0\2\162\1\0\1\162\1\0\1\162\3\0\30\162"+
"\24\0\2\66\1\0\2\66\1\0\1\66\4\0\3\66"+
"\1\0\1\66\1\0\1\66\3\0\30\66\25\0\1\163"+
"\1\0\1\163\2\0\1\163\5\0\2\163\1\0\1\163"+
"\1\0\1\163\3\0\30\163\23\0\13\71\1\0\65\71"+
"\12\164\1\165\66\164\1\0\1\75\12\0\1\75\2\0"+
"\1\166\1\62\10\0\1\62\50\0\2\76\11\0\1\76"+
"\1\0\1\76\1\167\1\76\1\0\1\170\4\0\1\76"+
"\1\0\1\76\1\0\1\170\1\76\7\0\2\76\7\0"+
"\1\76\24\0\1\77\12\0\1\77\2\0\1\171\62\0"+
"\1\100\12\0\1\100\3\0\1\62\10\0\1\62\47\0"+
"\13\16\1\0\65\16\13\107\1\0\10\107\1\110\1\172"+
"\66\107\1\0\65\107\25\0\1\173\54\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\2\4\1\174\25\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\21\4\1\175\6\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\23\4\1\176\4\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\30\4\2\0\1\177\21\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\10\4\1\200\17\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\4\4\1\201\23\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\1\202\27\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\1\4\1\203\26\4\24\0\2\4\1\0\2\4"+ "\3\0\5\4\1\204\22\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\13\4\1\204\1\4\1\205\12\4\24\0\2\4"+ "\3\0\11\4\1\205\2\4\1\206\13\4\24\0\2\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\0\1\4\3\0\5\4\1\206\22\4\24\0\2\4"+ "\1\0\1\4\3\0\20\4\1\207\7\4\24\0\2\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\0\1\4\3\0\11\4\1\207\2\4\1\210\13\4"+ "\1\0\1\4\3\0\10\4\1\210\17\4\24\0\2\4"+
"\24\0\2\4\1\0\2\4\1\0\1\4\4\0\3\4"+
"\1\0\1\4\1\0\1\4\3\0\20\4\1\211\7\4"+
"\24\0\2\4\1\0\2\4\1\0\1\4\4\0\3\4"+
"\1\0\1\4\1\0\1\4\3\0\10\4\1\212\17\4"+
"\24\0\2\4\1\0\2\4\1\0\1\4\4\0\3\4"+
"\1\0\1\4\1\0\1\4\3\0\23\4\1\213\4\4"+
"\24\0\2\4\1\0\2\4\1\0\1\4\4\0\3\4"+
"\1\0\1\4\1\0\1\4\3\0\14\4\1\214\13\4"+
"\24\0\2\4\1\0\2\4\1\0\1\4\4\0\3\4"+
"\1\0\1\4\1\0\1\4\3\0\1\215\27\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\3\4\1\216\24\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\3\4\1\217\5\4\1\220"+
"\16\4\24\0\2\4\1\0\2\4\1\0\1\4\4\0"+
"\3\4\1\0\1\4\1\0\1\4\3\0\11\4\1\221"+
"\16\4\24\0\2\4\1\0\2\4\1\0\1\4\4\0"+
"\3\4\1\0\1\4\1\0\1\4\3\0\14\4\1\222"+
"\6\4\1\223\4\4\101\0\1\224\50\0\1\225\3\0"+
"\1\226\124\0\1\227\23\0\1\160\12\0\1\160\65\0"+
"\2\162\1\0\2\162\1\230\1\162\4\0\3\162\1\0"+
"\1\162\1\0\1\162\3\0\30\162\24\0\2\163\1\0"+
"\2\163\1\231\1\163\4\0\3\163\1\0\1\163\1\0"+
"\1\163\3\0\30\163\23\0\12\164\1\232\66\164\11\233"+
"\1\234\1\165\66\233\1\0\1\100\12\0\1\100\65\0"+
"\2\235\11\0\1\235\1\0\1\235\1\157\1\235\6\0"+
"\1\235\1\0\1\235\2\0\1\235\7\0\2\235\7\0"+
"\1\235\24\0\1\160\12\0\1\160\4\0\1\236\37\0"+
"\1\236\36\0\1\157\61\0\25\173\1\237\53\173\1\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\3\4\1\240\24\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\23\4\1\241\4\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\3\4\1\242\24\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\3\4\1\243\24\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\10\4\1\244\17\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\4\4\1\245\23\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\3\4\1\246\24\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\3\4\1\247\24\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\4\4\1\250\23\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\12\4\1\251\15\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\3\4\1\252\24\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\13\4\1\253\14\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\4\4\1\254\23\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\1\4\1\255\26\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\1\256\27\4\24\0\2\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\0\1\4\3\0\23\4\1\257\4\4\24\0\2\4"+ "\1\0\1\4\3\0\23\4\1\211\4\4\24\0\2\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\0\1\4\3\0\4\4\1\260\23\4\23\0\11\164"+ "\1\0\1\4\3\0\14\4\1\212\13\4\24\0\2\4"+
"\1\261\1\232\66\164\12\233\1\262\66\233\1\0\2\235"+
"\11\0\1\235\1\0\1\235\1\0\1\235\1\0\1\170"+
"\4\0\1\235\1\0\1\235\1\0\1\170\1\235\7\0"+
"\2\235\7\0\1\235\23\0\25\173\1\263\53\173\1\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\4\4\1\264\23\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\1\265\27\4\24\0\2\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+ "\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\0\1\4\3\0\11\4\1\266\16\4\24\0\2\4"+ "\1\0\1\4\3\0\1\213\27\4\24\0\2\4\1\0"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\0\1\4\3\0\4\4\1\267\23\4\24\0\2\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\0\1\4\3\0\12\4\1\270\15\4\24\0\2\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\0\1\4\3\0\21\4\1\271\6\4\24\0\2\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\0\1\4\3\0\6\4\1\272\21\4\24\0\2\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\0\1\4\3\0\14\4\1\273\13\4\24\0\2\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\0\1\4\3\0\3\4\1\274\24\4\24\0\2\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\0\1\4\3\0\24\4\1\275\3\4\24\0\2\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\0\1\4\3\0\3\4\1\276\24\4\23\0\11\233"+
"\1\234\1\262\66\233\25\173\1\277\53\173\1\0\2\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\0\1\4\3\0\5\4\1\300\22\4\24\0\2\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\0\1\4\3\0\4\4\1\301\23\4\24\0\2\4"+
"\1\0\2\4\1\0\1\4\4\0\3\4\1\0\1\4"+
"\1\0\1\4\3\0\1\302\27\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+ "\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\16\4\1\303\11\4\24\0\2\4\1\0"+ "\1\4\3\0\3\4\1\214\24\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+ "\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\10\4\1\304\17\4\24\0\2\4\1\0"+ "\1\4\3\0\3\4\1\215\5\4\1\216\16\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\11\4\1\217\16\4\24\0"+
"\2\4\1\0\2\4\1\0\1\4\4\0\3\4\1\0"+
"\1\4\1\0\1\4\3\0\14\4\1\220\6\4\1\221"+
"\4\4\101\0\1\222\50\0\1\223\3\0\1\224\124\0"+
"\1\225\23\0\1\157\12\0\1\157\65\0\2\161\1\0"+
"\2\161\1\226\1\161\4\0\3\161\1\0\1\161\1\0"+
"\1\161\3\0\30\161\24\0\2\162\1\0\2\162\1\227"+
"\1\162\4\0\3\162\1\0\1\162\1\0\1\162\3\0"+
"\30\162\23\0\12\163\1\230\66\163\11\231\1\232\1\164"+
"\66\231\1\0\1\100\12\0\1\100\65\0\2\233\11\0"+
"\1\233\1\0\1\233\1\156\1\233\6\0\1\233\1\0"+
"\1\233\2\0\1\233\7\0\2\233\7\0\1\233\24\0"+
"\1\157\12\0\1\157\4\0\1\234\37\0\1\234\36\0"+
"\1\156\61\0\25\172\1\235\53\172\1\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+ "\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\1\305\27\4\24\0\2\4\1\0\2\4"+ "\1\4\3\0\3\4\1\236\24\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\23\4\1\237\4\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\3\4\1\240\24\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\3\4\1\241\24\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\10\4\1\242\17\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\4\4\1\243\23\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\3\4\1\244\24\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\3\4\1\245\24\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\4\4\1\246\23\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\12\4\1\247\15\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\3\4\1\250\24\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\13\4\1\251\14\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\4\4\1\252\23\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\1\4\1\253\26\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\1\254\27\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\1\4\1\306\26\4\24\0\2\4\1\0\2\4"+ "\3\0\23\4\1\255\4\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\11\4\1\307\16\4\24\0\2\4\1\0\2\4"+ "\3\0\4\4\1\256\23\4\23\0\11\163\1\257\1\230"+
"\66\163\12\231\1\260\66\231\1\0\2\233\11\0\1\233"+
"\1\0\1\233\1\0\1\233\1\0\1\167\4\0\1\233"+
"\1\0\1\233\1\0\1\167\1\233\7\0\2\233\7\0"+
"\1\233\23\0\25\172\1\261\53\172\1\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\4\4\1\262\23\4\24\0\2\4\1\0"+
"\2\4\1\0\1\4\4\0\3\4\1\0\1\4\1\0"+
"\1\4\3\0\1\263\27\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\13\4\1\310\14\4\24\0\2\4\1\0\2\4"+ "\3\0\11\4\1\264\16\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\6\4\1\311\21\4\24\0\2\4\1\0\2\4"+ "\3\0\4\4\1\265\23\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\12\4\1\312\15\4\24\0\2\4\1\0\2\4"+ "\3\0\12\4\1\266\15\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\3\4\1\313\24\4\24\0\2\4\1\0\2\4"+ "\3\0\21\4\1\267\6\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\3\4\1\314\24\4\24\0\2\4\1\0\2\4"+ "\3\0\6\4\1\270\21\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+ "\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\1\315\27\4\23\0"; "\3\0\14\4\1\271\13\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\3\4\1\272\24\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\24\4\1\273\3\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\3\4\1\274\24\4\23\0\11\231\1\232\1\260"+
"\66\231\25\172\1\275\53\172\1\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\5\4\1\276\22\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\4\4\1\277\23\4\24\0\2\4\1\0\2\4"+
"\1\0\1\4\4\0\3\4\1\0\1\4\1\0\1\4"+
"\3\0\1\300\27\4\24\0\2\4\1\0\2\4\1\0"+
"\1\4\4\0\3\4\1\0\1\4\1\0\1\4\3\0"+
"\16\4\1\301\11\4\24\0\2\4\1\0\2\4\1\0"+
"\1\4\4\0\3\4\1\0\1\4\1\0\1\4\3\0"+
"\10\4\1\302\17\4\24\0\2\4\1\0\2\4\1\0"+
"\1\4\4\0\3\4\1\0\1\4\1\0\1\4\3\0"+
"\1\303\27\4\24\0\2\4\1\0\2\4\1\0\1\4"+
"\4\0\3\4\1\0\1\4\1\0\1\4\3\0\1\4"+
"\1\304\26\4\24\0\2\4\1\0\2\4\1\0\1\4"+
"\4\0\3\4\1\0\1\4\1\0\1\4\3\0\11\4"+
"\1\305\16\4\24\0\2\4\1\0\2\4\1\0\1\4"+
"\4\0\3\4\1\0\1\4\1\0\1\4\3\0\13\4"+
"\1\306\14\4\24\0\2\4\1\0\2\4\1\0\1\4"+
"\4\0\3\4\1\0\1\4\1\0\1\4\3\0\6\4"+
"\1\307\21\4\24\0\2\4\1\0\2\4\1\0\1\4"+
"\4\0\3\4\1\0\1\4\1\0\1\4\3\0\12\4"+
"\1\310\15\4\24\0\2\4\1\0\2\4\1\0\1\4"+
"\4\0\3\4\1\0\1\4\1\0\1\4\3\0\3\4"+
"\1\311\24\4\24\0\2\4\1\0\2\4\1\0\1\4"+
"\4\0\3\4\1\0\1\4\1\0\1\4\3\0\3\4"+
"\1\312\24\4\24\0\2\4\1\0\2\4\1\0\1\4"+
"\4\0\3\4\1\0\1\4\1\0\1\4\3\0\1\313"+
"\27\4\23\0";
private static int [] zzUnpackTrans() { private static int [] zzUnpackTrans() {
int [] result = new int[8840]; int [] result = new int[8775];
int offset = 0; int offset = 0;
offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
return result; return result;
@@ -495,13 +492,13 @@ class _JetLexer implements FlexLexer {
private static final String ZZ_ATTRIBUTE_PACKED_0 = private static final String ZZ_ATTRIBUTE_PACKED_0 =
"\1\0\1\11\43\1\1\11\1\1\11\11\1\0\1\1"+ "\1\0\1\11\43\1\1\11\1\1\11\11\1\0\1\1"+
"\1\0\1\1\1\0\1\1\1\0\1\11\2\1\2\11"+ "\1\0\1\1\1\0\1\1\1\0\1\11\2\1\2\11"+
"\4\1\5\11\35\1\1\11\1\0\1\1\12\11\1\1"+ "\4\1\5\11\34\1\1\11\1\0\1\1\12\11\1\1"+
"\1\11\2\0\2\1\4\0\1\11\4\1\1\11\24\1"+ "\1\11\2\0\2\1\4\0\1\11\3\1\1\11\24\1"+
"\6\11\1\0\1\1\1\11\1\1\2\0\21\1\1\11"+ "\6\11\1\0\1\1\1\11\1\1\2\0\21\1\1\11"+
"\2\0\13\1\1\11\16\1"; "\2\0\13\1\1\11\16\1";
private static int [] zzUnpackAttribute() { private static int [] zzUnpackAttribute() {
int [] result = new int[205]; int [] result = new int[203];
int offset = 0; int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result; return result;
@@ -809,359 +806,355 @@ class _JetLexer implements FlexLexer {
case 3: case 3:
{ return JetTokens.IDENTIFIER; { return JetTokens.IDENTIFIER;
} }
case 90: break; case 89: break;
case 64: case 63:
{ return JetTokens.FOR_KEYWORD ; { return JetTokens.FOR_KEYWORD ;
} }
case 91: break; case 90: break;
case 86: case 85:
{ return JetTokens.RETURN_KEYWORD ; { return JetTokens.RETURN_KEYWORD ;
} }
case 92: break; case 91: break;
case 72: case 71:
{ return JetTokens.NULL_KEYWORD ; { return JetTokens.NULL_KEYWORD ;
} }
case 93: break; case 92: break;
case 16: case 16:
{ return JetTokens.LT ; { return JetTokens.LT ;
} }
case 94: break; case 93: break;
case 45: case 45:
{ return JetTokens.DO_KEYWORD ; { return JetTokens.DO_KEYWORD ;
} }
case 95: break; case 94: break;
case 15: case 15:
{ return JetTokens.PLUS ; { return JetTokens.PLUS ;
} }
case 96: break; case 95: break;
case 60: case 60:
{ return JetTokens.RAW_STRING_LITERAL; { return JetTokens.RAW_STRING_LITERAL;
} }
case 97: break; case 96: break;
case 51: case 51:
{ return JetTokens.PLUSEQ ; { return JetTokens.PLUSEQ ;
} }
case 98: break; case 97: break;
case 27: case 27:
{ return JetTokens.COMMA ; { return JetTokens.COMMA ;
} }
case 99: break; case 98: break;
case 17: case 17:
{ return JetTokens.GT ; { return JetTokens.GT ;
} }
case 100: break; case 99: break;
case 4: case 4:
{ return JetTokens.WHITE_SPACE; { return JetTokens.WHITE_SPACE;
} }
case 101: break; case 100: break;
case 84: case 83:
{ return JetTokens.TYPEOF_KEYWORD ; { return JetTokens.TYPEOF_KEYWORD ;
} }
case 102: break; case 101: break;
case 25: case 25:
{ return JetTokens.RPAR ; { return JetTokens.RPAR ;
} }
case 103: break; case 102: break;
case 47: case 47:
{ return JetTokens.DOUBLE_ARROW; { return JetTokens.DOUBLE_ARROW;
} }
case 104: break; case 103: break;
case 74: case 73:
{ return JetTokens.TRUE_KEYWORD ; { return JetTokens.TRUE_KEYWORD ;
} }
case 105: break; case 104: break;
case 30: case 30:
{ return JetTokens.FIELD_IDENTIFIER; { return JetTokens.FIELD_IDENTIFIER;
} }
case 106: break; case 105: break;
case 55: case 55:
{ return JetTokens.ANDAND ; { return JetTokens.ANDAND ;
} }
case 107: break; case 106: break;
case 59: case 59:
{ return JetTokens.DOC_COMMENT; { return JetTokens.DOC_COMMENT;
} }
case 108: break; case 107: break;
case 29: case 29:
{ return JetTokens.FLOAT_LITERAL; { return JetTokens.FLOAT_LITERAL;
} }
case 109: break; case 108: break;
case 33: case 33:
{ return JetTokens.EOL_COMMENT; { return JetTokens.EOL_COMMENT;
} }
case 110: break; case 109: break;
case 77: case 76:
{ return JetTokens.WHEN_KEYWORD ; { return JetTokens.WHEN_KEYWORD ;
} }
case 111: break; case 110: break;
case 18: case 18:
{ return JetTokens.COLON ; { return JetTokens.COLON ;
} }
case 112: break; case 111: break;
case 53: case 53:
{ return JetTokens.LTEQ ; { return JetTokens.LTEQ ;
} }
case 113: break; case 112: break;
case 40: case 40:
{ return JetTokens.ARROW ; { return JetTokens.ARROW ;
} }
case 114: break; case 113: break;
case 20: case 20:
{ return JetTokens.LBRACKET ; { return JetTokens.LBRACKET ;
} }
case 115: break; case 114: break;
case 58: case 58:
{ yypushback(2); return JetTokens.INTEGER_LITERAL; { yypushback(2); return JetTokens.INTEGER_LITERAL;
} }
case 116: break; case 115: break;
case 10: case 10:
{ return JetTokens.CHARACTER_LITERAL; { return JetTokens.CHARACTER_LITERAL;
} }
case 117: break; case 116: break;
case 66: case 65:
{ return JetTokens.VAR_KEYWORD ; { return JetTokens.VAR_KEYWORD ;
} }
case 118: break; case 117: break;
case 54: case 54:
{ return JetTokens.GTEQ ; { return JetTokens.GTEQ ;
} }
case 119: break; case 118: break;
case 2: case 2:
{ return JetTokens.INTEGER_LITERAL; { return JetTokens.INTEGER_LITERAL;
} }
case 120: break; case 119: break;
case 23: case 23:
{ return JetTokens.RBRACE ; { return JetTokens.RBRACE ;
} }
case 121: break; case 120: break;
case 79: case 78:
{ return JetTokens.CLASS_KEYWORD ; { return JetTokens.CLASS_KEYWORD ;
} }
case 122: break; case 121: break;
case 13: case 13:
{ return JetTokens.EXCL ; { return JetTokens.EXCL ;
} }
case 123: break; case 122: break;
case 63: case 62:
{ return JetTokens.TRY_KEYWORD ; { return JetTokens.TRY_KEYWORD ;
} }
case 124: break; case 123: break;
case 48: case 48:
{ return JetTokens.EXCLEQ ; { return JetTokens.EXCLEQ ;
} }
case 125: break; case 124: break;
case 39: case 39:
{ return JetTokens.MINUSEQ ; { return JetTokens.MINUSEQ ;
} }
case 126: break; case 125: break;
case 80: case 79:
{ return JetTokens.THROW_KEYWORD ; { return JetTokens.THROW_KEYWORD ;
} }
case 127: break; case 126: break;
case 83: case 82:
{ return JetTokens.WHILE_KEYWORD ; { return JetTokens.WHILE_KEYWORD ;
} }
case 128: break; case 127: break;
case 38: case 38:
{ return JetTokens.MINUSMINUS; { return JetTokens.MINUSMINUS;
} }
case 129: break; case 128: break;
case 87: case 86:
{ return JetTokens.CONTINUE_KEYWORD ; { return JetTokens.CONTINUE_KEYWORD ;
} }
case 130: break; case 129: break;
case 32: case 32:
{ return JetTokens.ATAT ; { return JetTokens.ATAT ;
} }
case 131: break; case 130: break;
case 69: case 68:
{ return JetTokens.NOT_IN; { return JetTokens.NOT_IN;
} }
case 132: break; case 131: break;
case 6: case 6:
{ return JetTokens.DIV ; { return JetTokens.DIV ;
} }
case 133: break; case 132: break;
case 50: case 50:
{ return JetTokens.ELVIS ; { return JetTokens.ELVIS ;
} }
case 134: break; case 133: break;
case 31: case 31:
{ return JetTokens.LABEL_IDENTIFIER; { return JetTokens.LABEL_IDENTIFIER;
} }
case 135: break; case 134: break;
case 14: case 14:
{ return JetTokens.QUEST ; { return JetTokens.QUEST ;
} }
case 136: break; case 135: break;
case 56: case 56:
{ return JetTokens.OROR ; { return JetTokens.OROR ;
} }
case 137: break; case 136: break;
case 19: case 19:
{ return JetTokens.PERC ; { return JetTokens.PERC ;
} }
case 138: break; case 137: break;
case 71: case 70:
{ return JetTokens.EXCLEQEQEQ; { return JetTokens.EXCLEQEQEQ;
} }
case 139: break; case 138: break;
case 57: case 57:
{ return JetTokens.PERCEQ ; { return JetTokens.PERCEQ ;
} }
case 140: break; case 139: break;
case 37: case 37:
{ return JetTokens.RANGE ; { return JetTokens.RANGE ;
} }
case 141: break; case 140: break;
case 1: case 1:
{ return TokenType.BAD_CHARACTER; { return TokenType.BAD_CHARACTER;
} }
case 142: break; case 141: break;
case 49: case 49:
{ return JetTokens.SAFE_ACCESS; { return JetTokens.SAFE_ACCESS;
} }
case 143: break; case 142: break;
case 88: case 87:
{ return JetTokens.NAMESPACE_KEYWORD ; { return JetTokens.NAMESPACE_KEYWORD ;
} }
case 144: break; case 143: break;
case 70: case 69:
{ return JetTokens.NOT_IS; { return JetTokens.NOT_IS;
} }
case 145: break; case 144: break;
case 7: case 7:
{ return JetTokens.MUL ; { return JetTokens.MUL ;
} }
case 146: break; case 145: break;
case 21: case 21:
{ return JetTokens.RBRACKET ; { return JetTokens.RBRACKET ;
} }
case 147: break; case 146: break;
case 52: case 52:
{ return JetTokens.PLUSPLUS ; { return JetTokens.PLUSPLUS ;
} }
case 148: break; case 147: break;
case 76: case 75:
{ return JetTokens.THIS_KEYWORD ; { return JetTokens.THIS_KEYWORD ;
} }
case 149: break; case 148: break;
case 8: case 8:
{ return JetTokens.DOT ; { return JetTokens.DOT ;
} }
case 150: break; case 149: break;
case 26: case 26:
{ return JetTokens.SEMICOLON ; { return JetTokens.SEMICOLON ;
} }
case 151: break; case 150: break;
case 44: case 44:
{ return JetTokens.IF_KEYWORD ; { return JetTokens.IF_KEYWORD ;
} }
case 152: break; case 151: break;
case 12: case 12:
{ return JetTokens.EQ ; { return JetTokens.EQ ;
} }
case 153: break; case 152: break;
case 5: case 5:
{ return JetTokens.AT ; { return JetTokens.AT ;
} }
case 154: break; case 153: break;
case 62: case 61:
{ return JetTokens.AS_SAFE; { return JetTokens.AS_SAFE;
} }
case 155: break; case 154: break;
case 24: case 24:
{ return JetTokens.LPAR ; { return JetTokens.LPAR ;
} }
case 156: break; case 155: break;
case 9: case 9:
{ return JetTokens.MINUS ; { return JetTokens.MINUS ;
} }
case 157: break; case 156: break;
case 81: case 80:
{ return JetTokens.FALSE_KEYWORD ; { return JetTokens.FALSE_KEYWORD ;
} }
case 158: break; case 157: break;
case 75: case 74:
{ return JetTokens.TYPE_KEYWORD ; { return JetTokens.TYPE_KEYWORD ;
} }
case 159: break; case 158: break;
case 65: case 64:
{ return JetTokens.FUN_KEYWORD ; { return JetTokens.FUN_KEYWORD ;
} }
case 160: break; case 159: break;
case 43: case 43:
{ return JetTokens.IS_KEYWORD ; { return JetTokens.IS_KEYWORD ;
} }
case 161: break; case 160: break;
case 35: case 35:
{ return JetTokens.DIVEQ ; { return JetTokens.DIVEQ ;
} }
case 162: break; case 161: break;
case 89: case 88:
{ return JetTokens.EXTENSION_KEYWORD ; { return JetTokens.EXTENSION_KEYWORD ;
} }
case 163: break; case 162: break;
case 73: case 72:
{ return JetTokens.ELSE_KEYWORD ; { return JetTokens.ELSE_KEYWORD ;
} }
case 164: break; case 163: break;
case 41: case 41:
{ return JetTokens.AS_KEYWORD ; { return JetTokens.AS_KEYWORD ;
} }
case 165: break; case 164: break;
case 42: case 42:
{ return JetTokens.IN_KEYWORD ; { return JetTokens.IN_KEYWORD ;
} }
case 166: break; case 165: break;
case 46: case 46:
{ return JetTokens.EQEQ ; { return JetTokens.EQEQ ;
} }
case 167: break; case 166: break;
case 67: case 66:
{ return JetTokens.VAL_KEYWORD ; { return JetTokens.VAL_KEYWORD ;
} }
case 168: break; case 167: break;
case 68: case 67:
{ return JetTokens.EQEQEQ ; { return JetTokens.EQEQEQ ;
} }
case 169: break; case 168: break;
case 78: case 77:
{ return JetTokens.CAPITALIZED_THIS_KEYWORD ; { return JetTokens.CAPITALIZED_THIS_KEYWORD ;
} }
case 170: break; case 169: break;
case 61:
{ return JetTokens.NEW_KEYWORD ;
}
case 171: break;
case 36: case 36:
{ return JetTokens.MULTEQ ; { return JetTokens.MULTEQ ;
} }
case 172: break; case 170: break;
case 11: case 11:
{ return JetTokens.STRING_LITERAL; { return JetTokens.STRING_LITERAL;
} }
case 173: break; case 171: break;
case 22: case 22:
{ return JetTokens.LBRACE ; { return JetTokens.LBRACE ;
} }
case 174: break; case 172: break;
case 85: case 84:
{ return JetTokens.OBJECT_KEYWORD ; { return JetTokens.OBJECT_KEYWORD ;
} }
case 175: break; case 173: break;
case 82: case 81:
{ return JetTokens.BREAK_KEYWORD ; { return JetTokens.BREAK_KEYWORD ;
} }
case 176: break; case 174: break;
case 34: case 34:
{ return JetTokens.BLOCK_COMMENT; { return JetTokens.BLOCK_COMMENT;
} }
case 177: break; case 175: break;
case 28: case 28:
{ return JetTokens.HASH ; { return JetTokens.HASH ;
} }
case 178: break; case 176: break;
default: default:
if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
zzAtEOF = true; zzAtEOF = true;
+3 -2
View File
@@ -1,6 +1,6 @@
== foo == == foo ==
fun foo() { fun foo() {
val a = new Array<Int> val a = Array<Int>
3 3
a[10] = 4 a[10] = 4
2 2
@@ -11,7 +11,8 @@ fun foo() {
--------------------- ---------------------
l0: l0:
<START> <START>
r(new Array<Int>) r(Array)
r(Array<Int>)
w(a) w(a)
r(3) r(3)
r(4) r(4)
+1 -1
View File
@@ -1,5 +1,5 @@
fun foo() { fun foo() {
val a = new Array<Int> val a = Array<Int>
3 3
a[10] = 4 a[10] = 4
2 2
+3 -2
View File
@@ -9,7 +9,7 @@ fun assignments() : Unit {
val y = true && false val y = true && false
val z = false && true val z = false && true
val t = new Test(); val t = Test();
t.x = 1 t.x = 1
} }
--------------------- ---------------------
@@ -43,7 +43,8 @@ l4:
l5: l5:
r(false && true) r(false && true)
w(z) w(z)
r(new Test()) r(Test)
r(Test())
w(t) w(t)
r(1) r(1)
r(t) r(t)
+1 -1
View File
@@ -12,6 +12,6 @@ fun assignments() : Unit {
val y = true && false val y = true && false
val z = false && true val z = false && true
val t = new Test(); val t = Test();
t.x = 1 t.x = 1
} }
+7 -2
View File
@@ -1,11 +1,16 @@
== fail == == fail ==
fun fail() : Nothing { fun fail() : Nothing {
throw new java.lang.RuntimeException() throw java.lang.RuntimeException()
} }
--------------------- ---------------------
l0: l0:
<START> <START>
r(new java.lang.RuntimeException()) r(java)
r(lang)
r(java.lang)
r(RuntimeException)
r(RuntimeException())
r(java.lang.RuntimeException())
jmp(error) jmp(error)
l1: l1:
<END> <END>
+1 -1
View File
@@ -1,3 +1,3 @@
fun fail() : Nothing { fun fail() : Nothing {
throw new java.lang.RuntimeException() throw java.lang.RuntimeException()
} }
@@ -21,9 +21,9 @@ fun f(): Unit {
x == 1 x == 1
x != 1 x != 1
<error>new A() == 1</error> <error>A() == 1</error>
new B() <error>==</error> 1 B() <error>==</error> 1
new C() <error>==</error> 1 C() <error>==</error> 1
<error>x === "1"</error> <error>x === "1"</error>
<error>x !== "1"</error> <error>x !== "1"</error>
+6 -6
View File
@@ -4,14 +4,14 @@ namespace boundsWithSubstitutors {
class C : A<C> class C : A<C>
val a = new B<C>() val a = B<C>()
val a1 = new B<<error>Int</error>>() val a1 = B<<error>Int</error>>()
class X<A, B : A>() class X<A, B : A>()
val b = new X<Any, X<A<C>, C>> val b = X<Any, X<A<C>, C>>
val b0 = new X<Any, <error>Any?</error>> val b0 = X<Any, <error>Any?</error>>
val b1 = new X<Any, X<A<C>, <error>String</error>>> val b1 = X<Any, X<A<C>, <error>String</error>>>
} }
@@ -19,7 +19,7 @@ namespace boundsWithSubstitutors {
open class B<T : A>() open class B<T : A>()
class C<T : B<<error>Int</error>>, X : {(B<<error>Char</error>>) : (B<<error>Any</error>>, B<A>)}>() : B<<error>Any</error>>() { // 2 errors class C<T : B<<error>Int</error>>, X : {(B<<error>Char</error>>) : (B<<error>Any</error>>, B<A>)}>() : B<<error>Any</error>>() { // 2 errors
val a = new B<<error>Char</error>>() // error val a = B<<error>Char</error>>() // error
val x : {(B<<error>Char</error>>) : B<<error>Any</error>>} val x : {(B<<error>Char</error>>) : B<<error>Any</error>>}
} }
+1 -1
View File
@@ -61,7 +61,7 @@ namespace null_safety {
command.equals1(null) command.equals1(null)
command<warning>?.</warning>equals1(null) command<warning>?.</warning>equals1(null)
val c = new Command() val c = Command()
c<warning>?.</warning>equals(null) c<warning>?.</warning>equals(null)
if (command == null) 1 if (command == null) 1
+10 -10
View File
@@ -66,16 +66,16 @@ class Range1() {
} }
fun test() { fun test() {
for (i in <error>new NotRange1()</error>); for (i in <error>NotRange1()</error>);
for (i in <error>new NotRange2()</error>); for (i in <error>NotRange2()</error>);
for (i in <error>new NotRange3()</error>); for (i in <error>NotRange3()</error>);
for (i in <error>new NotRange4()</error>); for (i in <error>NotRange4()</error>);
for (i in <error>new NotRange5()</error>); for (i in <error>NotRange5()</error>);
for (i in <error>new NotRange6()</error>); for (i in <error>NotRange6()</error>);
for (i in <error>new NotRange7()</error>); for (i in <error>NotRange7()</error>);
for (i in new Range0()); for (i in Range0());
for (i in new Range1()); for (i in Range1());
for (i in (new ArrayList<Int>() : List<Int>)); for (i in (ArrayList<Int>() : List<Int>));
} }
+3 -3
View File
@@ -4,7 +4,7 @@ class IncDec() {
} }
fun testIncDec() { fun testIncDec() {
var x = new IncDec() var x = IncDec()
x++ x++
++x ++x
x-- x--
@@ -21,7 +21,7 @@ class WrongIncDec() {
} }
fun testWrongIncDec() { fun testWrongIncDec() {
var x = new WrongIncDec() var x = WrongIncDec()
x<error>++</error> x<error>++</error>
<error>++</error>x <error>++</error>x
x<error>--</error> x<error>--</error>
@@ -34,7 +34,7 @@ class UnitIncDec() {
} }
fun testUnitIncDec() { fun testUnitIncDec() {
var x = new UnitIncDec() var x = UnitIncDec()
x++ x++
++x ++x
x-- x--
+6 -6
View File
@@ -32,9 +32,9 @@ class Test1<T : A>
} }
fun test() { fun test() {
new Test1<<error>B</error>>() Test1<<error>B</error>>()
new Test1<<error>A</error>>() Test1<<error>A</error>>()
new Test1<C>() Test1<C>()
} }
class Foo() {} class Foo() {}
@@ -60,9 +60,9 @@ fun <T : A>
t.bar() t.bar()
} }
val test1 = test2<<error>A</error>>(new A()) val test1 = test2<<error>A</error>>(A())
val test2 = test2<<error>B</error>>(new B()) val test2 = test2<<error>B</error>>(B())
val test3 = test2<C>(new C()) val test3 = test2<C>(C())
class Test<<error>T</error>> class Test<<error>T</error>>
where where
+5 -5
View File
@@ -5,7 +5,7 @@ import <error>utils</error>.*
import java.io.PrintStream import java.io.PrintStream
import java.lang.Comparable as Com import java.lang.Comparable as Com
val l : List<in Int> = new ArrayList<Int>() val l : List<in Int> = ArrayList<Int>()
fun test(l : java.util.List<Int>) { fun test(l : java.util.List<Int>) {
val x : java.<error>List</error> val x : java.<error>List</error>
@@ -24,7 +24,7 @@ fun test(l : java.util.List<Int>) {
Collections.singleton<Int>(1) : Set<Int>? Collections.singleton<Int>(1) : Set<Int>?
Collections.singleton<Int><error>(1.0)</error> Collections.singleton<Int><error>(1.0)</error>
<error>new List<Int></error> <error>List</error><Int>
val o = "sdf" <warning>as</warning> Object val o = "sdf" <warning>as</warning> Object
@@ -36,14 +36,14 @@ fun test(l : java.util.List<Int>) {
System.out?.println(e.getMessage()) System.out?.println(e.getMessage())
} }
new PrintStream("sdf") PrintStream("sdf")
val c : Com<Int>? = null val c : Com<Int>? = null
c : java.lang.Comparable<Int>? c : java.lang.Comparable<Int>?
// Collections.sort<Integer>(new ArrayList<Integer>()) // Collections.sort<Integer>(ArrayList<Integer>())
new xxx.<error>Class</error>() xxx.Class<error>()</error>
} }
+1 -1
View File
@@ -149,7 +149,7 @@ fun foo(a : Nothing) : Unit {
} }
fun fail() : Nothing { fun fail() : Nothing {
throw new java.lang.RuntimeException() throw java.lang.RuntimeException()
} }
fun nullIsNotNothing() : Unit { fun nullIsNotNothing() : Unit {
@@ -10,15 +10,15 @@ fun takeFirst(expr: StringBuilder): Char {
} }
fun evaluateArg(expr: AbstractStringBuilder, numbers: ArrayList<Int>): Int { fun evaluateArg(expr: AbstractStringBuilder, numbers: ArrayList<Int>): Int {
if (expr.length() == 0) throw new Exception("Syntax error: Character expected"); if (expr.length() == 0) throw Exception("Syntax error: Character expected");
val c = takeFirst<error>(expr)</error> val c = takeFirst<error>(expr)</error>
if (c <error>>=</error> '0' && c <error><=</error> '9') { if (c <error>>=</error> '0' && c <error><=</error> '9') {
val n = c - '0' val n = c - '0'
if (!numbers.contains(n)) throw new Exception("You used incorrect number: " + n) if (!numbers.contains(n)) throw Exception("You used incorrect number: " + n)
numbers.remove(n) numbers.remove(n)
return n return n
} }
throw new Exception("Syntax error: Unrecognized character " + c) throw Exception("Syntax error: Unrecognized character " + c)
} }
fun evaluateAdd(expr: StringBuilder, numbers: ArrayList<Int>): Int { fun evaluateAdd(expr: StringBuilder, numbers: ArrayList<Int>): Int {
@@ -40,9 +40,9 @@ fun evaluate(expr: StringBuilder, numbers: ArrayList<Int>): Int {
fun main(args: Array<String>) { fun main(args: Array<String>) {
System.out?.println("24 game") System.out?.println("24 game")
val numbers = new ArrayList<Int>(4) val numbers = ArrayList<Int>(4)
val rnd = new Random(); val rnd = Random();
val prompt = new StringBuilder() val prompt = StringBuilder()
for(val i in 0..3) { for(val i in 0..3) {
val n = rnd.nextInt(9) + 1 val n = rnd.nextInt(9) + 1
numbers.add(n) numbers.add(n)
@@ -51,8 +51,8 @@ fun main(args: Array<String>) {
} }
System.out?.println("Your numbers: " + prompt) System.out?.println("Your numbers: " + prompt)
System.out?.println("Enter your expression:") System.out?.println("Enter your expression:")
val reader = new BufferedReader(new InputStreamReader(System.`in`)) val reader = BufferedReader(InputStreamReader(System.`in`))
val expr = new StringBuilder(reader.readLine()) val expr = StringBuilder(reader.readLine())
try { try {
val result = evaluate(expr, numbers) val result = evaluate(expr, numbers)
if (result != 24) if (result != 24)
+1 -1
View File
@@ -6,7 +6,7 @@ class Item(val room: Object) {
val name : String val name : String
} }
val items: ArrayList<Item> = new ArrayList<Item> val items: ArrayList<Item> = ArrayList<Item>
fun test(room : Object) { fun test(room : Object) {
for(val item: Item in items) { for(val item: Item in items) {
@@ -11,7 +11,7 @@ fun vl(l : Left) : Int = l.v
fun vr(r : Right) : Int = r.v fun vr(r : Right) : Int = r.v
fun box() : String { fun box() : String {
val d = new D() val d = D()
d.v = 42 d.v = 42
if (d.v != 42) return "Fail #1" if (d.v != 42) return "Fail #1"
@@ -10,8 +10,8 @@ class Derived2() : Abstract, Base() {}
fun test(s : Base) : Boolean = s.n(238) == 239 fun test(s : Base) : Boolean = s.n(238) == 239
fun box() : String { fun box() : String {
if (!test(new Base())) return "Fail #1" if (!test(Base())) return "Fail #1"
if (!test(new Derived1())) return "Fail #2" if (!test(Derived1())) return "Fail #2"
if (!test(new Derived2())) return "Fail #3" if (!test(Derived2())) return "Fail #3"
return "OK" return "OK"
} }
@@ -11,22 +11,22 @@ class P3(x : Int, yy : Y) : X(x), Y by yy, Abstract {}
class P4(x : Int, yy : Y) : Y by yy, Abstract, X(x) {} class P4(x : Int, yy : Y) : Y by yy, Abstract, X(x) {}
fun box() : String { fun box() : String {
if (new X(239).x != 239) return "FAIL #1" if (X(239).x != 239) return "FAIL #1"
if (new Y(239).y != 239) return "FAIL #2" if (Y(239).y != 239) return "FAIL #2"
val p = new Point(240, -1) val p = Point(240, -1)
if (p.x + p.y != 239) return "FAIL #3" if (p.x + p.y != 239) return "FAIL #3"
val y = new Y(-1) val y = Y(-1)
val p1 = new P1(240, y) val p1 = P1(240, y)
if (p1.x + p1.y != 239) return "FAIL #4" if (p1.x + p1.y != 239) return "FAIL #4"
val p2 = new P2(240, y) val p2 = P2(240, y)
if (p2.x + p2.y != 239) return "FAIL #5" if (p2.x + p2.y != 239) return "FAIL #5"
val p3 = new P3(240, y) val p3 = P3(240, y)
if (p3.x + p3.y != 239) return "FAIL #6" if (p3.x + p3.y != 239) return "FAIL #6"
val p4 = new P4(240, y) val p4 = P4(240, y)
if (p4.x + p4.y != 239) return "FAIL #7" if (p4.x + p4.y != 239) return "FAIL #7"
"OK" "OK"
@@ -5,10 +5,10 @@ class Outer() {
class InnerDerived(): InnerBase() { class InnerDerived(): InnerBase() {
} }
public val foo: InnerBase? = new InnerDerived() public val foo: InnerBase? = InnerDerived()
} }
fun box() { fun box() {
val o = new Outer() val o = Outer()
return if (o.foo === null) "fail" else "OK" return if (o.foo === null) "fail" else "OK"
} }
@@ -7,7 +7,7 @@ class Bar(): Foo {
} }
fun box() { fun box() {
val bar = new Bar() val bar = Bar()
val f = bar.test() val f = bar.test()
return if (f == "xyzzy") "OK" else "fail" return if (f == "xyzzy") "OK" else "fail"
} }
@@ -7,7 +7,7 @@ class C() {
} }
fun box(): String { fun box(): String {
val c = new C() val c = C()
if (c.f != 610) return "fail" if (c.f != 610) return "fail"
return "OK" return "OK"
} }
@@ -2,7 +2,7 @@ import java.util.*
import java.io.* import java.io.*
class World() { class World() {
public val items: ArrayList<Item> = new ArrayList<Item> public val items: ArrayList<Item> = ArrayList<Item>
class Item() { class Item() {
{ {
@@ -10,11 +10,11 @@ class World() {
} }
} }
val foo = new Item() val foo = Item()
} }
fun box() { fun box() {
val w = new World() val w = World()
if (w.items.size() != 1) return "fail" if (w.items.size() != 1) return "fail"
return "OK" return "OK"
} }
+3 -3
View File
@@ -6,13 +6,13 @@ class Outer(val foo: StringBuilder) {
} }
fun test() { fun test() {
return new Inner() return Inner()
} }
} }
fun box(): String { fun box(): String {
val sb = new StringBuilder("xyzzy") val sb = StringBuilder("xyzzy")
val o = new Outer(sb) val o = Outer(sb)
val i = o.test() val i = o.test()
val l = i.len() val l = i.len()
return if (l != 5) "fail" else "OK" return if (l != 5) "fail" else "OK"
@@ -3,6 +3,6 @@ class SimpleClass() {
} }
fun test() { fun test() {
val c = new SimpleClass() val c = SimpleClass()
return c.foo() return c.foo()
} }
+2 -2
View File
@@ -3,10 +3,10 @@ class Outer() {
val outer: Outer get() = this@Outer val outer: Outer get() = this@Outer
} }
public val x = new Inner() public val x = Inner()
} }
fun box() { fun box() {
val o = new Outer() val o = Outer()
return if (o === o.x.outer) "OK" else "fail" return if (o === o.x.outer) "OK" else "fail"
} }
@@ -26,8 +26,8 @@ fun code(s : Base) : Int {
fun test(s : Base) : Boolean = code(s) == 0 fun test(s : Base) : Boolean = code(s) == 0
fun box() : String { fun box() : String {
if (!test(new Base())) return "Fail #1" if (!test(Base())) return "Fail #1"
if (!test(new Derived1())) return "Fail #2" if (!test(Derived1())) return "Fail #2"
if (!test(new Derived2())) return "Fail #3" if (!test(Derived2())) return "Fail #3"
return "OK" return "OK"
} }
@@ -7,10 +7,10 @@ class Outer() {
class InnerDerived(): InnerBase(s) { class InnerDerived(): InnerBase(s) {
} }
public val x = new InnerDerived() public val x = InnerDerived()
} }
fun box() { fun box() {
val o = new Outer() val o = Outer()
return if (o.x.name != "xyzzy") "fail" else "OK" return if (o.x.name != "xyzzy") "fail" else "OK"
} }
@@ -8,8 +8,8 @@ class D() : Left(), Right() {
} }
fun box() : String { fun box() : String {
val r : Right = new Right() val r : Right = Right()
val d : D = new D() val d : D = D()
if (r.f() != 42) return "Fail #1" if (r.f() != 42) return "Fail #1"
if (d.f() != 239) return "Fail #2" if (d.f() != 239) return "Fail #2"
@@ -1,7 +1,7 @@
import java.util.* import java.util.*
fun concat(l: List<String>): String? { fun concat(l: List<String>): String? {
val sb = new StringBuilder() val sb = StringBuilder()
for(s in l) { for(s in l) {
sb.append(s) sb.append(s)
} }
@@ -1,5 +1,5 @@
fun concat(l: Array<String>): String? { fun concat(l: Array<String>): String? {
val sb = new StringBuilder() val sb = StringBuilder()
for(s in l) { for(s in l) {
sb.append(s) sb.append(s)
} }
@@ -1,3 +1,3 @@
fun StringBuilder.first() = this.charAt(0) fun StringBuilder.first() = this.charAt(0)
fun foo() = new StringBuilder("foo").first() fun foo() = StringBuilder("foo").first()
@@ -8,7 +8,7 @@ fun StringBuilder.takeFirst(): Char {
fun foo(expr: StringBuilder): Int { fun foo(expr: StringBuilder): Int {
val c = expr.takeFirst() val c = expr.takeFirst()
when(c) { when(c) {
'\0' => throw new Exception("zero") '\0' => throw Exception("zero")
else => throw new Exception("nonzero" + c) else => throw Exception("nonzero" + c)
} }
} }
+1 -1
View File
@@ -1,5 +1,5 @@
fun f() { fun f() {
val x = new StringBuilder(); val x = StringBuilder();
g(x); g(x);
return x.toString(); return x.toString();
} }
@@ -5,6 +5,6 @@ class SimpleClass {
} }
fun test() { fun test() {
val c = new SimpleClass() val c = SimpleClass()
return c.foo() return c.foo()
} }
+1 -1
View File
@@ -1,6 +1,6 @@
import java.io.* import java.io.*
fun main(args: Array<String>) { fun main(args: Array<String>) {
val reader = new BufferedReader(new InputStreamReader(System.`in`)) val reader = BufferedReader(InputStreamReader(System.`in`))
while(true) { while(true) {
val cmd = reader.readLine() as String val cmd = reader.readLine() as String
} }
@@ -3,6 +3,6 @@ class Wrapper<T>() {
} }
fun foo() { fun foo() {
val wrapper = new Wrapper<Int>() val wrapper = Wrapper<Int>()
return wrapper.castToSelf(new Wrapper<String>()) return wrapper.castToSelf(Wrapper<String>())
} }
@@ -1,4 +1,4 @@
class Point() { class Point() {
} }
fun foo() = new Point() fun foo() = Point()
@@ -3,6 +3,6 @@ class Wrapper<T>() {
} }
fun foo() { fun foo() {
val wrapper = new Wrapper<Int>() val wrapper = Wrapper<Int>()
return wrapper.isSameWrapper(new Wrapper<String>()) return wrapper.isSameWrapper(Wrapper<String>())
} }
@@ -2,6 +2,6 @@ class Wrapper<T>() {
} }
fun foo() { fun foo() {
val wrapper = new Wrapper<Int>() val wrapper = Wrapper<Int>()
return wrapper is Wrapper<String> return wrapper is Wrapper<String>
} }
@@ -2,6 +2,6 @@ class Point() {
} }
fun foo() { fun foo() {
val p = new Point(); val p = Point();
return typeof(p); return typeof(p);
} }
+1 -1
View File
@@ -1,6 +1,6 @@
fun a( fun a(
a : foo = throw new Foo(), a : foo = throw Foo(),
a : foo = return 10, a : foo = return 10,
a : foo = break, a : foo = break,
a : foo = break @la, a : foo = break @la,
+3 -7
View File
@@ -22,13 +22,9 @@ JetFile: ControlStructures.jet
THROW THROW
PsiElement(throw)('throw') PsiElement(throw)('throw')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('Foo')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
+1 -1
View File
@@ -2,4 +2,4 @@
val z = System.out val z = System.out
fun foo() { throw new Exception(); } fun foo() { throw Exception(); }
+3 -7
View File
@@ -30,13 +30,9 @@ JetFile: ModifierAsSelector.jet
THROW THROW
PsiElement(throw)('throw') PsiElement(throw)('throw')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('Exception')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Exception')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
+1 -1
View File
@@ -5,7 +5,7 @@ class X
namespace foo.bar { namespace foo.bar {
fun foo() { fun foo() {
namespace.foo.bar.X namespace.foo.bar.X
new namespace.foo.bar.X() namespace.foo.bar.X()
when (e) { when (e) {
is namespace.foo.bar.X @ (x) => {} is namespace.foo.bar.X @ (x) => {}
} }
+16 -18
View File
@@ -52,26 +52,24 @@ JetFile: RootNamespace.jet
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('X') PsiElement(IDENTIFIER)('X')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
NEW DOT_QUALIFIED_EXPRESSION
PsiElement(new)('new') DOT_QUALIFIED_EXPRESSION
PsiWhiteSpace(' ') DOT_QUALIFIED_EXPRESSION
TYPE_REFERENCE ROOT_NAMESPACE
USER_TYPE PsiElement(namespace)('namespace')
USER_TYPE
USER_TYPE
PsiElement(namespace)('namespace')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.') PsiElement(DOT)('.')
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('X') PsiElement(IDENTIFIER)('foo')
VALUE_ARGUMENT_LIST PsiElement(DOT)('.')
PsiElement(LPAR)('(') REFERENCE_EXPRESSION
PsiElement(RPAR)(')') PsiElement(IDENTIFIER)('bar')
PsiElement(DOT)('.')
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('X')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
WHEN WHEN
PsiElement(when)('when') PsiElement(when)('when')
+5 -5
View File
@@ -19,12 +19,12 @@ fun a(
a : foo = (10), a : foo = (10),
a : foo = (10, "A", 0xf), a : foo = (10, "A", 0xf),
a : foo = typeof(10), a : foo = typeof(10),
a : foo = new Foo(bar), a : foo = Foo(bar),
a : foo = new Foo<A>(bar), a : foo = Foo<A>(bar),
a : foo = new Foo(), a : foo = Foo(),
a : foo = new Foo<bar>(), a : foo = Foo<bar>(),
a : foo = object : Foo{}, a : foo = object : Foo{},
a : foo = throw new Foo(), a : foo = throw Foo(),
a : foo = return 10, a : foo = return 10,
a : foo = break, a : foo = break,
a : foo = break @la, a : foo = break @la,
+31 -51
View File
@@ -366,13 +366,9 @@ JetFile: SimpleExpressions.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('Foo')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
VALUE_ARGUMENT VALUE_ARGUMENT
@@ -393,21 +389,17 @@ JetFile: SimpleExpressions.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('Foo')
TYPE_REFERENCE TYPE_ARGUMENT_LIST
USER_TYPE PsiElement(LT)('<')
REFERENCE_EXPRESSION TYPE_PROJECTION
PsiElement(IDENTIFIER)('Foo') TYPE_REFERENCE
TYPE_ARGUMENT_LIST USER_TYPE
PsiElement(LT)('<') REFERENCE_EXPRESSION
TYPE_PROJECTION PsiElement(IDENTIFIER)('A')
TYPE_REFERENCE PsiElement(GT)('>')
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A')
PsiElement(GT)('>')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
VALUE_ARGUMENT VALUE_ARGUMENT
@@ -428,13 +420,9 @@ JetFile: SimpleExpressions.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('Foo')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
@@ -452,21 +440,17 @@ JetFile: SimpleExpressions.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('Foo')
TYPE_REFERENCE TYPE_ARGUMENT_LIST
USER_TYPE PsiElement(LT)('<')
REFERENCE_EXPRESSION TYPE_PROJECTION
PsiElement(IDENTIFIER)('Foo') TYPE_REFERENCE
TYPE_ARGUMENT_LIST USER_TYPE
PsiElement(LT)('<') REFERENCE_EXPRESSION
TYPE_PROJECTION PsiElement(IDENTIFIER)('bar')
TYPE_REFERENCE PsiElement(GT)('>')
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(GT)('>')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
@@ -516,13 +500,9 @@ JetFile: SimpleExpressions.jet
THROW THROW
PsiElement(throw)('throw') PsiElement(throw)('throw')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('Foo')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
+1 -1
View File
@@ -1,6 +1,6 @@
class Foo<T : List<This>>(a : This, b : bar<This>) : List<This> by foo as List<This> { class Foo<T : List<This>>(a : This, b : bar<This>) : List<This> by foo as List<This> {
fun foo(a : This) : This { fun foo(a : This) : This {
val a : This = new Foo<This>(); val a : This = Foo<This>();
} }
} }
+10 -14
View File
@@ -131,20 +131,16 @@ JetFile: ThisType.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('Foo')
TYPE_REFERENCE TYPE_ARGUMENT_LIST
USER_TYPE PsiElement(LT)('<')
REFERENCE_EXPRESSION TYPE_PROJECTION
PsiElement(IDENTIFIER)('Foo') TYPE_REFERENCE
TYPE_ARGUMENT_LIST SELF_TYPE
PsiElement(LT)('<') PsiElement(This)('This')
TYPE_PROJECTION PsiElement(GT)('>')
TYPE_REFERENCE
SELF_TYPE
PsiElement(This)('This')
PsiElement(GT)('>')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
@@ -17,7 +17,7 @@ enum class GodMessages {
// Type of this variable is GOD_AnonymousClass // Type of this variable is GOD_AnonymousClass
val GOD = object { val GOD = object {
fun sendMessage(message : GodMEssage) = throw new RuntimeException(message.name) fun sendMessage(message : GodMEssage) = throw RuntimeException(message.name)
}; };
} }
@@ -186,13 +186,9 @@ JetFile: AnonymousObjects.jet
THROW THROW
PsiElement(throw)('throw') PsiElement(throw)('throw')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('RuntimeException')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('RuntimeException')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
VALUE_ARGUMENT VALUE_ARGUMENT
+2 -2
View File
@@ -5,7 +5,7 @@ val foo = object : AntBuilder() {
} }
[lazy] val gant = library { [lazy] val gant = library {
new File("$gantHome/lib").files.each { File("$gantHome/lib").files.each {
classpath(it) classpath(it)
} }
} }
@@ -32,7 +32,7 @@ class AntBuilder {
} }
fun library(initializer : { Library.() : Library}) { fun library(initializer : { Library.() : Library}) {
val lib = new Library() val lib = Library()
lib.initializer() lib.initializer()
return lib return lib
} }
+6 -14
View File
@@ -91,13 +91,9 @@ JetFile: Builder.jet
BODY BODY
DOT_QUALIFIED_EXPRESSION DOT_QUALIFIED_EXPRESSION
DOT_QUALIFIED_EXPRESSION DOT_QUALIFIED_EXPRESSION
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('File')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('File')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
VALUE_ARGUMENT VALUE_ARGUMENT
@@ -401,13 +397,9 @@ JetFile: Builder.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('Library')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Library')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
+7 -7
View File
@@ -4,28 +4,28 @@ class Edge<V, E>(val from : V, val data : E, val to : V)
class Graph<V, E> { class Graph<V, E> {
private val mutableEdges = new ArrayList<Edge<V, E>>() // type is ArrayList, but I want IMutableList private val mutableEdges = ArrayList<Edge<V, E>>() // type is ArrayList, but I want IMutableList
/* options: /* options:
private val edges : IMutableList<Edge<V, E>> = new ArrayList<Edge<V, E>>() private val edges : IMutableList<Edge<V, E>> = ArrayList<Edge<V, E>>()
private val edges : IMutableList<Edge<V, E>> = new ArrayList() // not an erasure, but a request to infer parameters private val edges : IMutableList<Edge<V, E>> = ArrayList() // not an erasure, but a request to infer parameters
*/ */
private val mutableVertices = new HashSet<Vertex<V>>() private val mutableVertices = HashSet<Vertex<V>>()
val edges : IList<Edge<V, E>> = mutableEdges; val edges : IList<Edge<V, E>> = mutableEdges;
val vertices : ISet<Edge<V, E>> = mutableVertices; val vertices : ISet<Edge<V, E>> = mutableVertices;
fun addEdge(from : V, data : E, to : V) { fun addEdge(from : V, data : E, to : V) {
mutableEdges.add(new Edge(from, data, to)) // constructor parameters are inferred mutableEdges.add(Edge(from, data, to)) // constructor parameters are inferred
} }
fun addVertex(v : V) { fun addVertex(v : V) {
mutableEdges.add(new Edge(from, data, to)) // constructor parameters are inferred mutableEdges.add(Edge(from, data, to)) // constructor parameters are inferred
} }
fun neighbours(v : Vertex<V>) = edges.filter{it.from == v}.map{it.to} // type is IIterable<Vertex<V>> fun neighbours(v : Vertex<V>) = edges.filter{it.from == v}.map{it.to} // type is IIterable<Vertex<V>>
fun dfs(handler : {(V) : Unit}) { fun dfs(handler : {(V) : Unit}) {
val visited = new HashSet<Vertex<V>>() val visited = HashSet<Vertex<V>>()
vertices.foreach{dfs(it, visited, handler)} vertices.foreach{dfs(it, visited, handler)}
fun dfs(current : Vertex<V>, visited : ISet<Vertex<V>>, handler : {(V) : Unit}) { fun dfs(current : Vertex<V>, visited : ISet<Vertex<V>>, handler : {(V) : Unit}) {
+71 -91
View File
@@ -105,43 +105,39 @@ JetFile: Graph.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('ArrayList')
TYPE_REFERENCE TYPE_ARGUMENT_LIST
USER_TYPE PsiElement(LT)('<')
REFERENCE_EXPRESSION TYPE_PROJECTION
PsiElement(IDENTIFIER)('ArrayList') TYPE_REFERENCE
TYPE_ARGUMENT_LIST USER_TYPE
PsiElement(LT)('<') REFERENCE_EXPRESSION
TYPE_PROJECTION PsiElement(IDENTIFIER)('Edge')
TYPE_REFERENCE TYPE_ARGUMENT_LIST
USER_TYPE PsiElement(LT)('<')
REFERENCE_EXPRESSION TYPE_PROJECTION
PsiElement(IDENTIFIER)('Edge') TYPE_REFERENCE
TYPE_ARGUMENT_LIST USER_TYPE
PsiElement(LT)('<') REFERENCE_EXPRESSION
TYPE_PROJECTION PsiElement(IDENTIFIER)('V')
TYPE_REFERENCE PsiElement(COMMA)(',')
USER_TYPE PsiWhiteSpace(' ')
REFERENCE_EXPRESSION TYPE_PROJECTION
PsiElement(IDENTIFIER)('V') TYPE_REFERENCE
PsiElement(COMMA)(',') USER_TYPE
PsiWhiteSpace(' ') REFERENCE_EXPRESSION
TYPE_PROJECTION PsiElement(IDENTIFIER)('E')
TYPE_REFERENCE PsiElement(GT)('>')
USER_TYPE PsiElement(GT)('>')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('E')
PsiElement(GT)('>')
PsiElement(GT)('>')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiComment(EOL_COMMENT)('// type is ArrayList, but I want IMutableList') PsiComment(EOL_COMMENT)('// type is ArrayList, but I want IMutableList')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
PsiComment(BLOCK_COMMENT)('/* options:\n private val edges : IMutableList<Edge<V, E>> = new ArrayList<Edge<V, E>>()\n private val edges : IMutableList<Edge<V, E>> = new ArrayList() // not an erasure, but a request to infer parameters\n*/') PsiComment(BLOCK_COMMENT)('/* options:\n private val edges : IMutableList<Edge<V, E>> = ArrayList<Edge<V, E>>()\n private val edges : IMutableList<Edge<V, E>> = ArrayList() // not an erasure, but a request to infer parameters\n*/')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
PROPERTY PROPERTY
MODIFIER_LIST MODIFIER_LIST
@@ -153,29 +149,25 @@ JetFile: Graph.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('HashSet')
TYPE_REFERENCE TYPE_ARGUMENT_LIST
USER_TYPE PsiElement(LT)('<')
REFERENCE_EXPRESSION TYPE_PROJECTION
PsiElement(IDENTIFIER)('HashSet') TYPE_REFERENCE
TYPE_ARGUMENT_LIST USER_TYPE
PsiElement(LT)('<') REFERENCE_EXPRESSION
TYPE_PROJECTION PsiElement(IDENTIFIER)('Vertex')
TYPE_REFERENCE TYPE_ARGUMENT_LIST
USER_TYPE PsiElement(LT)('<')
REFERENCE_EXPRESSION TYPE_PROJECTION
PsiElement(IDENTIFIER)('Vertex') TYPE_REFERENCE
TYPE_ARGUMENT_LIST USER_TYPE
PsiElement(LT)('<') REFERENCE_EXPRESSION
TYPE_PROJECTION PsiElement(IDENTIFIER)('V')
TYPE_REFERENCE PsiElement(GT)('>')
USER_TYPE PsiElement(GT)('>')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('V')
PsiElement(GT)('>')
PsiElement(GT)('>')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
@@ -314,13 +306,9 @@ JetFile: Graph.jet
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
VALUE_ARGUMENT VALUE_ARGUMENT
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('Edge')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Edge')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
VALUE_ARGUMENT VALUE_ARGUMENT
@@ -373,13 +361,9 @@ JetFile: Graph.jet
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
VALUE_ARGUMENT VALUE_ARGUMENT
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('Edge')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Edge')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
VALUE_ARGUMENT VALUE_ARGUMENT
@@ -513,29 +497,25 @@ JetFile: Graph.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('HashSet')
TYPE_REFERENCE TYPE_ARGUMENT_LIST
USER_TYPE PsiElement(LT)('<')
REFERENCE_EXPRESSION TYPE_PROJECTION
PsiElement(IDENTIFIER)('HashSet') TYPE_REFERENCE
TYPE_ARGUMENT_LIST USER_TYPE
PsiElement(LT)('<') REFERENCE_EXPRESSION
TYPE_PROJECTION PsiElement(IDENTIFIER)('Vertex')
TYPE_REFERENCE TYPE_ARGUMENT_LIST
USER_TYPE PsiElement(LT)('<')
REFERENCE_EXPRESSION TYPE_PROJECTION
PsiElement(IDENTIFIER)('Vertex') TYPE_REFERENCE
TYPE_ARGUMENT_LIST USER_TYPE
PsiElement(LT)('<') REFERENCE_EXPRESSION
TYPE_PROJECTION PsiElement(IDENTIFIER)('V')
TYPE_REFERENCE PsiElement(GT)('>')
USER_TYPE PsiElement(GT)('>')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('V')
PsiElement(GT)('>')
PsiElement(GT)('>')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
+2 -2
View File
@@ -5,7 +5,7 @@ class Queue<T> : IPushPop<T> {
private var tail : Item<T> = null private var tail : Item<T> = null
override fun push(item : T) { override fun push(item : T) {
val i = new Item(item) val i = Item(item)
if (tail == null) { if (tail == null) {
head = i head = i
tail = head tail = head
@@ -17,7 +17,7 @@ class Queue<T> : IPushPop<T> {
override fun pop() = override fun pop() =
if (head == null) if (head == null)
throw new UnderflowException() throw UnderflowException()
else { else {
val result = head.data val result = head.data
head = head.next head = head.next
+6 -14
View File
@@ -164,13 +164,9 @@ JetFile: Queue.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('Item')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Item')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
VALUE_ARGUMENT VALUE_ARGUMENT
@@ -289,13 +285,9 @@ JetFile: Queue.jet
THROW THROW
PsiElement(throw)('throw') PsiElement(throw)('throw')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('UnderflowException')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('UnderflowException')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
+1 -1
View File
@@ -1,5 +1,5 @@
class Stack<T> : IPushPop<T> { class Stack<T> : IPushPop<T> {
private val data = new ArrayList<T>(); private val data = ArrayList<T>();
override fun push(item : T) { override fun push(item : T) {
data.add(item) // Problem: I would like to write push(...) = data.add(...), but the types do not match data.add(item) // Problem: I would like to write push(...) = data.add(...), but the types do not match
+11 -15
View File
@@ -40,21 +40,17 @@ JetFile: Stack.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('ArrayList')
TYPE_REFERENCE TYPE_ARGUMENT_LIST
USER_TYPE PsiElement(LT)('<')
REFERENCE_EXPRESSION TYPE_PROJECTION
PsiElement(IDENTIFIER)('ArrayList') TYPE_REFERENCE
TYPE_ARGUMENT_LIST USER_TYPE
PsiElement(LT)('<') REFERENCE_EXPRESSION
TYPE_PROJECTION PsiElement(IDENTIFIER)('T')
TYPE_REFERENCE PsiElement(GT)('>')
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T')
PsiElement(GT)('>')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
@@ -1,11 +1,11 @@
class Pair(x : Int, y : Int) { class Pair(x : Int, y : Int) {
class object { class object {
fun copy(from : Pair, x : Int = from.x, y : Int = from.y) = new Pair(x, y) fun copy(from : Pair, x : Int = from.x, y : Int = from.y) = Pair(x, y)
} }
} }
// One can say: // One can say:
val p = new Point(1, 2) val p = Point(1, 2)
val p1 = Point.Copy(p, x = 2) val p1 = Point.Copy(p, x = 2)
val p2 = Point.Copy(p1, y = -1) val p2 = Point.Copy(p1, y = -1)
val p3 = Point.Copy(p) val p3 = Point.Copy(p)
+6 -14
View File
@@ -101,13 +101,9 @@ JetFile: UpdateOperation.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('Pair')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Pair')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
VALUE_ARGUMENT VALUE_ARGUMENT
@@ -133,13 +129,9 @@ JetFile: UpdateOperation.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('Point')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Point')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
VALUE_ARGUMENT VALUE_ARGUMENT
@@ -11,13 +11,13 @@ class ArrayList<T> : IMutableList<T> {
private fun checkVersion() { private fun checkVersion() {
if (version != myVersion) if (version != myVersion)
throw new ConcurrentModificationException() throw ConcurrentModificationException()
} }
override fun next() { override fun next() {
checkVersion() checkVersion()
if (hasNext) if (hasNext)
throw new NoMoreElementsException() throw NoMoreElementsException()
data[index++] data[index++]
} }
@@ -40,7 +40,7 @@ class ArrayList<T> : IMutableList<T> {
private fun checkIndex(index : Int) { private fun checkIndex(index : Int) {
if (index > used) if (index > used)
throw new IndexOutOfBoundsException(index) throw IndexOutOfBoundsException(index)
} }
override val isEmpty override val isEmpty
@@ -220,13 +220,9 @@ JetFile: ArrayList.jet
THROW THROW
PsiElement(throw)('throw') PsiElement(throw)('throw')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('ConcurrentModificationException')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('ConcurrentModificationException')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
@@ -267,13 +263,9 @@ JetFile: ArrayList.jet
THROW THROW
PsiElement(throw)('throw') PsiElement(throw)('throw')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('NoMoreElementsException')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('NoMoreElementsException')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
@@ -475,13 +467,9 @@ JetFile: ArrayList.jet
THROW THROW
PsiElement(throw)('throw') PsiElement(throw)('throw')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('IndexOutOfBoundsException')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('IndexOutOfBoundsException')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
VALUE_ARGUMENT VALUE_ARGUMENT
@@ -19,7 +19,7 @@ virtual class IMap<K, V> {
class HashableWrapper wraps (val obj : Any) : IHashable class HashableWrapper wraps (val obj : Any) : IHashable
// equals and hashCode implementations are inherited // equals and hashCode implementations are inherited
[inline] fun Any.hashable() : HashableWrapper = new HashableWrapper(this) [inline] fun Any.hashable() : HashableWrapper = HashableWrapper(this)
virtual class IHashingStrategy<K> { virtual class IHashingStrategy<K> {
fun equals(a : K, b : K) : Boolean fun equals(a : K, b : K) : Boolean
@@ -50,9 +50,9 @@ class StrategyHashMap<K, V>(hashingStrategy : IHashingStrategy<K>) : IMap<K, V>
// where !(K : IHashable) // where !(K : IHashable)
this() : this(new JavaObjectHashingStrategy<K>()) {} this() : this(JavaObjectHashingStrategy<K>()) {}
//this() where (K : IHashable) : this(new DefaultHashingStrategy<K>()) {} //this() where (K : IHashable) : this(DefaultHashingStrategy<K>()) {}
//... //...
} }
@@ -364,13 +364,9 @@ JetFile: HashMap.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('HashableWrapper')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('HashableWrapper')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
VALUE_ARGUMENT VALUE_ARGUMENT
@@ -955,21 +951,17 @@ JetFile: HashMap.jet
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
VALUE_ARGUMENT VALUE_ARGUMENT
NEW CALL_EXPRESSION
PsiElement(new)('new') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('JavaObjectHashingStrategy')
TYPE_REFERENCE TYPE_ARGUMENT_LIST
USER_TYPE PsiElement(LT)('<')
REFERENCE_EXPRESSION TYPE_PROJECTION
PsiElement(IDENTIFIER)('JavaObjectHashingStrategy') TYPE_REFERENCE
TYPE_ARGUMENT_LIST USER_TYPE
PsiElement(LT)('<') REFERENCE_EXPRESSION
TYPE_PROJECTION PsiElement(IDENTIFIER)('K')
TYPE_REFERENCE PsiElement(GT)('>')
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('K')
PsiElement(GT)('>')
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
@@ -979,7 +971,7 @@ JetFile: HashMap.jet
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
PsiComment(EOL_COMMENT)('//this() where (K : IHashable) : this(new DefaultHashingStrategy<K>()) {}') PsiComment(EOL_COMMENT)('//this() where (K : IHashable) : this(DefaultHashingStrategy<K>()) {}')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiComment(EOL_COMMENT)('//...') PsiComment(EOL_COMMENT)('//...')
PsiWhiteSpace('\n\n') PsiWhiteSpace('\n\n')
+1 -1
View File
@@ -6,7 +6,7 @@
~foo~fun foo(~foo.a~a : `std::Char`Char) = `foo.a`a`:std::Char` ~foo~fun foo(~foo.a~a : `std::Char`Char) = `foo.a`a`:std::Char`
~fooB~fun fooB() = `foo`foo('1')`:std::Char` ~fooB~fun fooB() = `foo`foo('1')`:std::Char`
~foo.1~fun foo() : Int = (1.`std::Int.plus(Int)`plus(1))`:std::Int` ~foo.1~fun foo() : Int = (1.`std::Int.plus(Int)`plus(1))`:std::Int`
~foo1~fun foo1() : `B`B = new `B()`B()`:B` ~foo1~fun foo1() : `B`B = `B()`B()`:B`
~A.a~val a : `std::Int`Int ~A.a~val a : `std::Int`Int
} }
+1 -1
View File
@@ -12,4 +12,4 @@ namespace Jet86
val a = `A`A.`A.x`x val a = `A`A.`A.x`x
val c = `B`B.`!null`x val c = `B`B.`!null`x
val d = new B().`B.x`x val d = B().`B.x`x
@@ -1,5 +1,5 @@
class C(~x~x : Int, ~y~val y : Int) : Base(`x`x /*parameter*/), Base1 by new Base1(`x`x) { class C(~x~x : Int, ~y~val y : Int) : Base(`x`x /*parameter*/), Base1 by Base1(`x`x) {
var z = `x`x // parameter var z = `x`x // parameter
get() = `$x`x // property get() = `$x`x // property
@@ -5,7 +5,7 @@ class A(~a~val a : Int) {
} }
fun test() { fun test() {
~va~val a = new A() ~va~val a = A()
`va`a.`$a`a`:std::Int` `va`a.`$a`a`:std::Int`
a.`b`b`:std::Int` a.`b`b`:std::Int`
a.`f`f()`:std::Int` a.`f`f()`:std::Int`
+11 -11
View File
@@ -1,56 +1,56 @@
class In<in T> { class In<in T>() {
~In.f:T->Unit~fun f(t : T) : Unit {} ~In.f:T->Unit~fun f(t : T) : Unit {}
~In.f:Int->Int~fun f(t : Int) : Int {} ~In.f:Int->Int~fun f(t : Int) : Int {}
~In.f1~fun f1(t : T) : Unit {} ~In.f1~fun f1(t : T) : Unit {}
} }
class Out<out T> { class Out<out T>() {
~Out.f~fun f() : T {} ~Out.f~fun f() : T {}
~Out.f(a)~fun f(a : Int) : Int {a} ~Out.f(a)~fun f(a : Int) : Int {a}
} }
class Inv<T> { class Inv<T>() {
~Inv.f~fun f(t : T) : T {t} ~Inv.f~fun f(t : T) : T {t}
~Inv.inf~fun inf(t : T) : Unit {} ~Inv.inf~fun inf(t : T) : Unit {}
~Inv.outf~fun outf() : T {} ~Inv.outf~fun outf() : T {}
} }
fun testInOut() { fun testInOut() {
new In<String>().`In.f:T->Unit`f("1"); In<String>().`In.f:T->Unit`f("1");
(return : In<in String>).`In.f:T->Unit`f("1"); (return : In<in String>).`In.f:T->Unit`f("1");
(return : In<out String>).`!`f("1") (return : In<out String>).`!`f("1")
(return : In<*>).`!`f("1"); (return : In<*>).`!`f("1");
new In<String>().`In.f:Int->Int`f(1); In<String>().`In.f:Int->Int`f(1);
(return : In<in String>).`In.f:Int->Int`f(1); (return : In<in String>).`In.f:Int->Int`f(1);
(return : In<out String>).`In.f:Int->Int`f(1) (return : In<out String>).`In.f:Int->Int`f(1)
(return : In<out String>).`!`f1(1) (return : In<out String>).`!`f1(1)
(return : In<*>).`In.f:Int->Int`f(1); (return : In<*>).`In.f:Int->Int`f(1);
new Out<Int>().`Out.f(a)`f(1) Out<Int>().`Out.f(a)`f(1)
(return : Out<out Int>).`Out.f(a)`f(1) (return : Out<out Int>).`Out.f(a)`f(1)
(return : Out<in Int>).`Out.f(a)`f(1) (return : Out<in Int>).`Out.f(a)`f(1)
(return : Out<*>).`Out.f(a)`f(1) (return : Out<*>).`Out.f(a)`f(1)
new Out<Int>().`Out.f`f() Out<Int>().`Out.f`f()
(return : Out<out Int>).`Out.f`f() (return : Out<out Int>).`Out.f`f()
(return : Out<in Int>).`Out.f`f() (return : Out<in Int>).`Out.f`f()
(return : Out<*>).`Out.f`f() (return : Out<*>).`Out.f`f()
new Inv<Int>().`Inv.f`f(1) Inv<Int>().`Inv.f`f(1)
(return : Inv<in Int>).`Inv.f`f(1) (return : Inv<in Int>).`Inv.f`f(1)
(return : Inv<out Int>).`!`f(1) (return : Inv<out Int>).`!`f(1)
(return : Inv<*>).`!`f(1) (return : Inv<*>).`!`f(1)
new Inv<Int>().`Inv.inf`inf(1) Inv<Int>().`Inv.inf`inf(1)
(return : Inv<in Int>).`Inv.inf`inf(1) (return : Inv<in Int>).`Inv.inf`inf(1)
(return : Inv<out Int>).`!`inf(1) (return : Inv<out Int>).`!`inf(1)
(return : Inv<*>).`!`inf(1) (return : Inv<*>).`!`inf(1)
new Inv<Int>().`Inv.outf`outf() Inv<Int>().`Inv.outf`outf()
((return : Inv<in Int>).`Inv.outf`outf())`:std::Any` ((return : Inv<in Int>).`Inv.outf`outf())`:std::Any`
(return : Inv<out Int>).`Inv.outf`outf() (return : Inv<out Int>).`Inv.outf`outf()
(return : Inv<*>).`Inv.outf`outf() (return : Inv<*>).`Inv.outf`outf()
new Inv<Int>().`Inv.outf`outf(1) Inv<Int>().`Inv.outf`outf(1)
} }
@@ -23,13 +23,13 @@ fun f_plus(): Int {
~t~fun <~t.T~T> t(~t.t~t : `t.T`T) : `t.T`T { ~t~fun <~t.T~T> t(~t.t~t : `t.T`T) : `t.T`T {
`t`t<Int>(1)`:std::Int` `t`t<Int>(1)`:std::Int`
`t`t<`t.T`T>(`t.t`t)`:t.T` `t`t<`t.T`T>(`t.t`t)`:t.T`
new `X()`X<`t.T`T>() `X()`X<`t.T`T>()
1 `std::Int.plus(Int)`+ 1 1 `std::Int.plus(Int)`+ 1
1 `std::Int.plus(Int)`+= 1 1 `std::Int.plus(Int)`+= 1
new X<String>() `plus`+ "1" X<String>() `plus`+ "1"
new X<String>() `plus`plus "sadfas" X<String>() `plus`plus "sadfas"
new X<String>().`plus`plus("") X<String>().`plus`plus("")
val x = new X<String>() val x = X<String>()
x `minus`- "" x `minus`- ""
x `times`* "" x `times`* ""
x `div`/ "" x `div`/ ""
@@ -61,7 +61,7 @@ fun f_plus(): Int {
fun <T> tt(t : T) : T { fun <T> tt(t : T) : T {
val x : List<Int> = 0 val x : List<Int> = 0
x`java::java.util.List.get()`[1] x`java::java.util.List.get()`[1]
val foo = new `Bar()`Bar() val foo = `Bar()`Bar()
foo`!`[null, 1] foo`!`[null, 1]
foo`get2`[1, 1] foo`get2`[1, 1]
foo`get1`[1] foo`get1`[1]
@@ -72,7 +72,7 @@ fun <T> tt(t : T) : T {
x`!`[null] = null x`!`[null] = null
(x`!`[null, 2]) = null (x`!`[null, 2]) = null
(`not`!foo)[1]`:std::Char` (`not`!foo)[1]`:std::Char`
val y = new Bar() val y = Bar()
y`inc`++ y`inc`++
`inc`++y `inc`++y
`dec`--y `dec`--y
@@ -87,13 +87,13 @@ fun <T> tt(t : T) : T {
} }
class UnitIncDec { class UnitIncDec() {
~uinc~fun inc() : Unit ~uinc~fun inc() : Unit
~udec~fun dec() : Unit ~udec~fun dec() : Unit
} }
fun testUnitIncDec() { fun testUnitIncDec() {
var x = new UnitIncDec() var x = UnitIncDec()
x`uinc`++ x`uinc`++
x`udec`-- x`udec`--
} }
+3 -3
View File
@@ -8,7 +8,7 @@ fun foo(~a~a : `std::Array`Array<`std::Int`Int>) : `java::java.util.List`List {
fun foo(o : `java::java.lang.Object`Object, l : `java::java.util`util.`java::java.util.List`List) : `java::java.util.List`List {} fun foo(o : `java::java.lang.Object`Object, l : `java::java.util`util.`java::java.util.List`List) : `java::java.util.List`List {}
~A~class A { ~A~class A() {
fun f(a : `java::java.util`util.`java::java.util.List`List) {} fun f(a : `java::java.util`util.`java::java.util.List`List) {}
fun f(a : `java::java.util.List`List) {} fun f(a : `java::java.util.List`List) {}
@@ -31,7 +31,7 @@ class B : `java::java.lang.Object`Object {
} }
fun barrr() : `std::Int`Int { fun barrr() : `std::Int`Int {
`foo`foo(new `A`A()) `foo`foo(`A`A())
} }
} }
@@ -40,7 +40,7 @@ class B : `java::java.lang.Object`Object {
} }
fun <T> t(t : T) : T { fun <T> t(t : T) : T {
`c`c(new java.lang.Integer(1)) `c`c(java.lang.Integer(1))
System.out.`java::java.io.PrintStream.print(Object)`print(t) System.out.`java::java.io.PrintStream.print(Object)`print(t)
System.out.`java::java.io.PrintStream.print(char[])`print(null : Array<Char>?) System.out.`java::java.io.PrintStream.print(char[])`print(null : Array<Char>?)
System.out.`java::java.io.PrintStream.print(Object)`print(null : Object?) System.out.`java::java.io.PrintStream.print(Object)`print(null : Object?)
+1 -1
View File
@@ -5,5 +5,5 @@ var xxxx = 1
} }
fun foo() { fun foo() {
new `SimpleClass`SimpleClass(1).`!`xxxx `SimpleClass`SimpleClass(1).`!`xxxx
} }

Some files were not shown because too many files have changed in this diff Show More