コード例 #1
0
ファイル: GMacMacroGenerator.cs プロジェクト: phreed/GMac
        private GMacMacro Create_Namespace_Macro(GMacNamespace nameSpace, string macroName)
        {
            if (GMacCompilerFeatures.CanDefineNamespaceMacros == false)
            {
                CompilationLog.RaiseGeneratorError <int>("Can't define a macro inside a namespace", RootParseNode);
            }

            if (nameSpace.CanDefineChildSymbol(macroName) == false)
            {
                CompilationLog.RaiseGeneratorError <int>("Symbol name already used", RootParseNode);
            }

            //Create the macro and add it to the symbol table
            return(nameSpace.DefineNamespaceMacro(macroName));
        }
コード例 #2
0
        private GMacStructure Create_Namespace_Structure(GMacNamespace nameSpace, string structureName)
        {
            if (GMacCompilerFeatures.CanDefineNamespaceStructures == false)
            {
                CompilationLog.RaiseGeneratorError <int>("Can't define a structure inside a namespace", RootParseNode);
            }

            Context.PushState(nameSpace.ChildSymbolScope);

            if (nameSpace.CanDefineChildSymbol(structureName) == false)
            {
                CompilationLog.RaiseGeneratorError <int>("Symbol name already used", RootParseNode);
            }

            Context.PopState();

            return(nameSpace.DefineNamespaceStructure(structureName));
        }
コード例 #3
0
        //public override void ResetOnAcquire()
        //{
        //    base.ResetOnAcquire();

        //    _generatedConstant = null;
        //}


        /// <summary>
        /// Generate a constant defined inside a namespace
        /// </summary>
        /// <param name="nameSpace"></param>
        /// <param name="constantName"></param>
        /// <returns></returns>
        private GMacConstant Create_Namespace_Constant(GMacNamespace nameSpace, string constantName)
        {
            if (GMacCompilerFeatures.CanDefineNamespaceConstants == false)
            {
                CompilationLog.RaiseGeneratorError <int>("Can't define a constant inside a namespace", RootParseNode);
            }

            Context.PushState(nameSpace.ChildSymbolScope);

            if (nameSpace.CanDefineChildSymbol(constantName) == false)
            {
                CompilationLog.RaiseGeneratorError <int>("Symbol name already used", RootParseNode);
            }

            var constantExpr = GMacExpressionGenerator.Translate(Context, RootParseNode.ChildNodes[1]);

            var constantValue = GMacExpressionEvaluator.EvaluateExpression(Context.ActiveParentScope, constantExpr);

            Context.PopState();

            return(nameSpace.DefineNamespaceConstant(constantName, constantValue));
        }