/// <summary>Creates a macro from a Define_macroContext.</summary> /// <param name="objectScope">The scope of the macro if there is no static attribute.</param> /// <param name="staticScope">The scope of the macro if there is a static attribute.</param> /// <param name="macroContext">The context of the macro.</param> /// <returns>A DefinedMacro if the macro has parameters, a MacroVar if there are no parameters.</returns> public DefinedMacro GetMacro(Scope objectScope, Scope staticScope, MacroFunctionContext macroContext) { // Get the return type. CodeType returnType = CodeType.GetCodeTypeFromContext(this, macroContext.Type); DefinedMacro newMacro = new DefinedMacro(this, objectScope, staticScope, macroContext, returnType); TranslateInfo.ApplyBlock((IApplyBlock)newMacro); return(newMacro); }
public MacroVar GetMacro(Scope objectScope, Scope staticScope, MacroVarDeclaration macroContext) { // Get the return type. CodeType returnType = CodeType.GetCodeTypeFromContext(this, macroContext.Type); MacroVar newMacro = new MacroVar(this, objectScope, staticScope, macroContext, returnType); TranslateInfo.ApplyBlock((IApplyBlock)newMacro); return(newMacro); }
/// <summary>Creates a macro from a Define_macroContext.</summary> /// <param name="objectScope">The scope of the macro if there is no static attribute.</param> /// <param name="staticScope">The scope of the macro if there is a static attribute.</param> /// <param name="macroContext">The context of the macro.</param> /// <returns>A DefinedMacro if the macro has parameters, a MacroVar if there are no parameters.</returns> public IScopeable GetMacro(Scope objectScope, Scope staticScope, DeltinScriptParser.Define_macroContext macroContext) { // If the ; is missing, syntax error. if (macroContext.STATEMENT_END() == null) { Script.Diagnostics.Error("Expected ;", DocRange.GetRange((object)macroContext.TERNARY_ELSE() ?? (object)macroContext.name ?? (object)macroContext).end.ToRange()); } // If the : is missing, syntax error. if (macroContext.TERNARY_ELSE() == null) { Script.Diagnostics.Error("Expected :", DocRange.GetRange(macroContext).end.ToRange()); } else { // Get the expression that will be parsed. if (macroContext.expr() == null) { Script.Diagnostics.Error("Expected expression.", DocRange.GetRange(macroContext.TERNARY_ELSE())); } } // Get the return type. CodeType returnType = CodeType.GetCodeTypeFromContext(this, macroContext.code_type()); IScopeable newMacro; if (macroContext.LEFT_PAREN() != null || macroContext.RIGHT_PAREN() != null) { newMacro = new DefinedMacro(this, objectScope, staticScope, macroContext, returnType); } else { newMacro = new MacroVar(this, objectScope, staticScope, macroContext, returnType); } TranslateInfo.ApplyBlock((IApplyBlock)newMacro); return(newMacro); }