public override object VisitMachineBody(PParser.MachineBodyContext context) { foreach (var machineEntryContext in context.machineEntry()) { switch (Visit(machineEntryContext)) { case Variable[] fields: CurrentMachine.AddFields(fields); break; case Function method: CurrentMachine.AddMethod(method); break; case State state: CurrentMachine.AddState(state); break; case StateGroup group: CurrentMachine.AddGroup(group); break; default: throw Handler.InternalError(machineEntryContext, "invalid machine entry"); } } return(null); }
private Function CreateAnonFunction(PParser.NoParamAnonEventHandlerContext context) { var fun = new Function(context) { Owner = CurrentMachine, Scope = CurrentScope.MakeChildScope() }; CurrentMachine.AddMethod(fun); nodesToDeclarations.Put(context, fun); return(fun); }
private Function CreateAnonFunction(PParser.AnonEventHandlerContext context) { var fun = new Function(context) { Owner = CurrentMachine, Scope = CurrentScope.MakeChildScope() }; CurrentMachine.AddMethod(fun); if (context.funParam() is PParser.FunParamContext paramContext) { var param = fun.Scope.Put(paramContext.name.GetText(), paramContext, VariableRole.Param); param.Type = ResolveType(paramContext.type()); nodesToDeclarations.Put(paramContext, param); fun.Signature.Parameters.Add(param); } nodesToDeclarations.Put(context, fun); return(fun); }