Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }