示例#1
0
        protected override void DefineCompiledCode()
        {
            var methods = decorated.methods.custom;
            var fields  = decorated.variables.variables;

            for (int i = 0; i < fields.Count; i++)
            {
                var variable = decorated.variables.variables[i];
                var field    = FieldGenerator.Field(AccessModifier.Public, FieldModifier.None, variable.declaration.type, variable.name);
                field.Default(variable.declaration.defaultValue);
                @class.AddField(field);
            }

            for (int i = 0; i < methods.Count; i++)
            {
                var nest = decorated.methods.custom[i];
                if (CanAddMethod(nest))
                {
                    var controlData = new ControlGenerationData();
                    controlData.returns = nest.entry.declaration.type;
                    var body   = nest.entry.invoke.hasAnyConnection ? (nest.entry.invoke.connection.destination?.unit as Unit).GenerateControl(nest.entry.invoke.connection.destination, controlData, 0) : string.Empty;
                    var method = Method(nest.name, nest.entry.declaration.scope, nest.entry.declaration.modifier, nest.entry.declaration.type, body: body);
                    AddParameters(method, nest);
                    @class.AddMethod(method);
                }
            }

            var keys = decorated.methods.overrides.Keys().ToArray();

            for (int i = 0; i < keys.Length; i++)
            {
                var nest = decorated.methods.overrides.current[keys[i]];
                if (CanAddMethod(nest))
                {
                    var controlData = new ControlGenerationData();
                    controlData.returns = nest.entry.declaration.type;
                    var body = nest.entry.invoke.hasAnyConnection? (nest.entry.invoke.connection.destination?.unit as Unit).GenerateControl(nest.entry.invoke.connection.destination, controlData, 0) : string.Empty;

                    var method = nest.entry.declaration.type.Is().Void() ?
                                 Method(
                        nest.name.Replace(" ", string.Empty),
                        nest.entry.declaration.scope,
                        MustOverride(nest) ? MethodModifier.Override : nest.entry.declaration.modifier,
                        nest.entry.declaration.type,
                        body: body
                        )
                        : Method(
                        nest.name.Replace(" ", string.Empty),
                        nest.entry.declaration.scope,
                        MustOverride(nest) ? MethodModifier.Override : nest.entry.declaration.modifier,
                        nest.entry.declaration.type,
                        body: body
                        );
                    AddParameters(method, nest);
                    @class.AddMethod(method);
                }
            }
            ;
        }
示例#2
0
        protected override void DefineLiveCode()
        {
            var keys = decorated.methods.overrides.KeysToArray();

            // FORCE COMPILE SHELL
            //HUMQuery.For(keys, (list, index) =>
            //{
            //    var nest = decorated.overrideMethods[keys[index]];
            //    if (CanAddMethod(nest))
            //    {
            //        var method = Method(nest.name, nest.scope, nest.modifier, nest.returnType);
            //        AddParameters(method, nest);
            //        @class.AddMethod(method);
            //    }
            //});

            for (int i = 0; i < keys.Length; i++)
            {
                var nest = decorated.methods.overrides[keys[i]];
                if (CanAddMethod(nest))
                {
                    var method = nest.returnType.Is().Void() ? Method(nest.name, nest.scope, nest.modifier, nest) : Method(nest.name, nest.scope, nest.modifier, nest.returnType);
                    if (!nest.returnType.Is().Void())
                    {
                        AddParameters(method, nest);
                    }
                    @class.AddMethod(method);
                }
            }
            ;
        }