Esempio n. 1
0
 public MacroEntry(MacroEntry other)
 {
     Id          = other.Id;
     Enabled     = other.Enabled;
     Type        = other.Type;
     Binding     = new MacroBinding(other.Binding);
     Function    = other.Function.Clone() as MacroFunction;
     Description = other.Description;
 }
Esempio n. 2
0
 public void Deserialize(BinaryReader reader)
 {
     Id      = reader.ReadUInt32();
     Enabled = reader.ReadBoolean();
     Type    = (MacroType)reader.ReadUInt32();
     Binding.Deserialize(reader);
     Function = MacroFunction.FromType(Type);
     Function.Deserialize(reader);
     Description = reader.ReadString();
 }
Esempio n. 3
0
File: Meta.cs Progetto: szensk/wul
        internal static IValue DefineMagicFunction(ListNode list, Scope scope)
        {
            var children = list.Children.Skip(1).ToArray();

            var    nameIdentifier = (IdentifierNode)children[0];
            string name           = nameIdentifier.Name;

            bool noFormalParameters = children.Length == 2;
            var  arguments          = noFormalParameters
                    ? new ListNode(list, new List <SyntaxNode>(), list.Line)
                    : (ListNode)children[1];
            var argNames = arguments.Children.OfType <IdentifierNode>().Select(a => a.Name);

            ListNode body = (ListNode)children[noFormalParameters ? 1 : 2];

            scope[name] = Value.Nil;
            var function = new MacroFunction(body, name, argNames.ToList(), scope);

            function.MetaType = MacroMetaType.Instance;
            scope[name]       = function;

            return(function);
        }
Esempio n. 4
0
        /// <summary>
        /// Ajoute des déclarations à ce Container à partir d'un block Access.
        /// </summary>
        /// <param name="block"></param>
        void AddDeclarationsFromMacroBlock(Language.NamedBlockDeclaration block, Semantic.TypeTable table)
        {
            foreach (Language.Instruction instruction in block.Instructions)
            {
                if (instruction is Language.ClassDeclaration)
                {
                    Language.ClassDeclaration classDecl = (Language.ClassDeclaration)instruction;
                    MacroClass classMacro = new MacroClass();

                    // Récupération du type en language Clank.Core.
                    Language.ClankType type = table.Types[classDecl.GetFullName()];
                    classMacro.Type = type;


                    bool foundName = false;
                    // Parse les instructions à la recherche de :
                    //  - une fonction Name qui retourne un string et qui contient des variables de type string
                    //  - d'autres fonctions qui ne contiennent que des variables de type string.
                    foreach (Language.Instruction funcDeclInstruction in classDecl.Instructions)
                    {
                        Language.FunctionDeclaration funcDecl = funcDeclInstruction as Language.FunctionDeclaration;
                        if (funcDecl != null)
                        {
                            if (funcDecl.Func.Name == "name")
                            {
                                // Nom de la classe
                                foundName = true;
                                classMacro.LanguageToTypeName = ParseLanguageTranslations(funcDecl);
                            }
                            else
                            {
                                // Ajout de la fonction.
                                MacroFunction func = new MacroFunction();
                                func.Function = funcDecl.Func;
                                func.LanguageToFunctionName = ParseLanguageTranslations(funcDecl);
                                classMacro.Functions.Add(func.Function.GetFullName(), func);
                            }
                        }
                        else if (funcDeclInstruction is Language.PlaceholderInstruction)
                        {
                        }
                        else
                        {
                            ParsingLog.AddWarning("Seules les déclarations de fonctions sont autorisées dans les classes de block macro. Obtenu : " +
                                                  funcDeclInstruction.GetType().Name + ".",
                                                  instruction.Line, instruction.Character, instruction.Source);
                        }
                    }
                    ClassDeclarations.Add(classMacro);
                    // Erreur si pas de nom de classe trouvé :
                    if (!foundName)
                    {
                        ParsingLog.AddError("Fonction 'string name()' attendue dans la déclaration de macro du type '" + type.Name + "'.",
                                            instruction.Line, instruction.Character, instruction.Source);
                    }
                }
                else if (instruction is Language.FunctionDeclaration)
                {
                    Language.FunctionDeclaration funcDecl = (Language.FunctionDeclaration)instruction;
                    MacroFunction func = new MacroFunction();
                    func.Function = funcDecl.Func;
                    func.LanguageToFunctionName = ParseLanguageTranslations(funcDecl);
                    FunctionDeclarations.Add(func);
                }
                else
                {
                    ParsingLog.AddWarning("Déclaration de classe attendue dans le block macro. Obtenu : " + instruction.GetType() + ".",
                                          instruction.Line, instruction.Character, instruction.Source);
                }
            }
        }
Esempio n. 5
0
 /// <summary>
 /// Defines the given macro function
 /// </summary>
 /// <param name="functionDefinition">The signature of the macro</param>
 /// <param name="macroFunction">The macro function</param>
 public void DefineMacroFunction(FunctionDefinition functionDefinition, MacroFunction macroFunction)
 {
     this.macroFunctions.Add(this.virtualMachine.Binder.FunctionSignature(functionDefinition), macroFunction);
 }