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)); }
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)); }
//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)); }