public IType check(Context context) { IType type = expression.check(context); IType errorType = new CategoryType("Error"); if (!errorType.isAssignableFrom(context, type)) { throw new SyntaxError(type.GetTypeName() + " does not extend Error"); } return(VoidType.Instance); }
private Context newLocalInstanceContext(Context context, IMethodDeclaration declaration) { InstanceContext instance = context.getClosestInstanceContext(); if (instance != null) { CategoryType required = (CategoryType)declaration.getMemberOf().GetIType(context); IType actual = instance.getInstanceType(); if (!required.isAssignableFrom(context, actual)) { instance = null; } } if (instance == null) { CategoryType declaring = (CategoryType)declaration.getMemberOf().GetIType(context); instance = context.newInstanceContext(declaring, false); } return(instance.newChildContext()); }