Exemple #1
0
        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);
        }
Exemple #2
0
        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());
        }