public override IPStmt VisitRaiseStmt(PParser.RaiseStmtContext context) { IPExpr evtExpr = exprVisitor.Visit(context.expr()); if (IsDefinitelyNullEvent(evtExpr)) { throw handler.EmittedNullEvent(evtExpr); } if (!PrimitiveType.Event.IsAssignableFrom(evtExpr.Type)) { throw handler.TypeMismatch(context.expr(), evtExpr.Type, PrimitiveType.Event); } method.CanCommunicate = true; method.CanChangeState = true; IPExpr[] args = (context.rvalueList()?.rvalue().Select(rv => exprVisitor.Visit(rv)) ?? Enumerable.Empty <IPExpr>()).ToArray(); if (evtExpr is EventRefExpr eventRef) { TypeCheckingUtils.ValidatePayloadTypes(handler, context, eventRef.PEvent.PayloadType, args); } return(new RaiseStmt(context, evtExpr, args)); }
public override IPStmt VisitRaiseStmt(PParser.RaiseStmtContext context) { var evtExpr = exprVisitor.Visit(context.expr()); if (IsDefinitelyNullEvent(evtExpr)) { throw handler.EmittedNullEvent(evtExpr); } if (!PrimitiveType.Event.IsAssignableFrom(evtExpr.Type)) { throw handler.TypeMismatch(context.expr(), evtExpr.Type, PrimitiveType.Event); } method.CanRaiseEvent = true; var args = TypeCheckingUtils.VisitRvalueList(context.rvalueList(), exprVisitor).ToArray(); if (evtExpr is EventRefExpr eventRef) { TypeCheckingUtils.ValidatePayloadTypes(handler, context, eventRef.Value.PayloadType, args); } return(new RaiseStmt(context, evtExpr, args)); }
public override object VisitRaiseStmt(PParser.RaiseStmtContext context) { return(null); }