Beispiel #1
0
        public UnifiedElement VisitCatchClause(CatchClause catchClause, object data)
        {
            var type = LookupType(catchClause.Type);
            var name = UnifiedVariableIdentifier.Create(catchClause.VariableName);
            var body = catchClause.Body.TryAcceptForExpression(this).ToBlock();

            return(UnifiedCatch.Create(type.ToSet(), name, body));
        }
Beispiel #2
0
 // catchブロック
 public override bool Visit(UnifiedCatch element, VisitorArgument arg)
 {
     Writer.Write("catch(");
     element.Annotations.TryAccept(this, arg);
     element.Modifiers.TryAccept(this, arg);
     Writer.Write(" ");
     element.Assign.TryAccept(this, arg);
     Writer.Write(")");
     element.Body.TryAccept(this, arg.Set(ForBlock));
     return(false);
 }
Beispiel #3
0
        private static UnifiedCatch CreateResbody(XElement node)
        {
            Contract.Requires(node != null);
            Contract.Requires(node.Name() == "resbody");
            Contract.Requires(node.FirstElement().Name() == "array");
            // TODO: UnifiedType.Create(ident) => identをUnifiedTypeIdentifierにべきでは?
            var children = node.FirstElement().Elements().ToList();
            var block    = CreateSmartBlock(node.LastElement());

            if (children.Count == 0)
            {
                return(UnifiedCatch.Create(
                           UnifiedSet <UnifiedType> .Create(), null, block));
            }
            var assign = CreateExpresion(children.Last().FirstElement());
            var types  = children.SkipLast()
                         .Select(CreateConst)
                         .Select(UnifiedType.Create)
                         .ToSet();

            return(UnifiedCatch.Create(types, assign, block));
        }
 // e.g. catch(Exception e){...}
 public override bool Visit(UnifiedCatch element, VisitorArgument arg)
 {
     Writer.Write("catch(");
     element.Annotations.TryAccept(this, arg);
     element.Modifiers.TryAccept(this, arg);
     element.Types.FirstOrDefault().TryAccept(this, arg);
     Writer.Write(" ");
     element.Assign.TryAccept(this, arg);
     Writer.Write(")");
     element.Body.TryAccept(this, arg.Set(ForBlock));
     return false;
 }