public override IPStmt VisitSendStmt(PParser.SendStmtContext context) { IPExpr machineExpr = exprVisitor.Visit(context.machine); if (!PrimitiveType.Machine.IsAssignableFrom(machineExpr.Type)) { throw handler.TypeMismatch(context.machine, machineExpr.Type, PrimitiveType.Machine); } IPExpr evtExpr = exprVisitor.Visit(context.@event); if (IsDefinitelyNullEvent(evtExpr)) { throw handler.EmittedNullEvent(evtExpr); } if (!PrimitiveType.Event.IsAssignableFrom(evtExpr.Type)) { throw handler.TypeMismatch(context.@event, evtExpr.Type, PrimitiveType.Event); } 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 SendStmt(context, machineExpr, evtExpr, args)); }
public override IPStmt VisitSendStmt(PParser.SendStmtContext context) { if (machine?.IsSpec == true) { throw handler.IllegalMonitorOperation(context, context.SEND().Symbol, machine); } IPExpr machineExpr = exprVisitor.Visit(context.machine); if (!PrimitiveType.Machine.IsAssignableFrom(machineExpr.Type)) { throw handler.TypeMismatch(context.machine, machineExpr.Type, PrimitiveType.Machine); } IPExpr evtExpr = exprVisitor.Visit(context.@event); if (IsDefinitelyNullEvent(evtExpr)) { throw handler.EmittedNullEvent(evtExpr); } if (!PrimitiveType.Event.IsAssignableFrom(evtExpr.Type)) { throw handler.TypeMismatch(context.@event, evtExpr.Type, PrimitiveType.Event); } IPExpr[] args = TypeCheckingUtils.VisitRvalueList(context.rvalueList(), exprVisitor).ToArray(); if (evtExpr is EventRefExpr eventRef) { TypeCheckingUtils.ValidatePayloadTypes(handler, context, eventRef.Value.PayloadType, args); } return(new SendStmt(context, machineExpr, evtExpr, args)); }
public override object VisitSendStmt(PParser.SendStmtContext context) { return(null); }