private static void Process(this ExtendedId extendedId, bool isVariable = true) { var scope = extendedId.Scope; if (isVariable) { var declaration = scope.GlobalVariableSearch(extendedId.Name); if (declaration == null) { throw new ScopeException($"Variable with name \"{extendedId.Name}\" does not exist"); } extendedId.VariableDeclaration = declaration; if (!declaration.Initialized) { throw new ScopeException( $"Variable with name \"{extendedId.Name}\" was not initialized before accessing"); } extendedId.ReturnType = declaration.ReturnType; } else { FunctionDeclaration declaration = scope.GlobalFunctionSearch(extendedId.Name); extendedId.ReturnType = declaration != null ? declaration.ReturnType : throw new ScopeException($"Variable with name \"{extendedId.Name}\" does not exist."); } }
private void LoadOntoStack(ExtendedId extendedIdNode, ILGenerator ilGenerator) { if (varsLocalBuilders.Keys.Contains(extendedIdNode.VariableDeclaration.FullName)) { var localBuilder = varsLocalBuilders[extendedIdNode.VariableDeclaration.FullName]; ilGenerator.Emit(OpCodes.Ldloc, localBuilder); } else { if (extendedIdNode.VariableDeclaration != null) { if (extendedIdNode.VariableDeclaration is FunctionVariableDeclarationParameter fdParam) { ilGenerator.Emit(OpCodes.Ldarg, (int)extendedIdNode.VariableDeclaration.Index); return; } } } if (fieldBuilders.ContainsKey(extendedIdNode.VariableDeclaration.FullName)) { var fieldBuilder = fieldBuilders[extendedIdNode.VariableDeclaration.FullName]; ilGenerator.Emit(OpCodes.Ldsfld, fieldBuilder); } }
public void Construct(CommonTree syntaxAttributeUsage) { Name = new ExtendedId(this, Scope); var syntaxExtendedId = syntaxAttributeUsage.GetChild(0).CastTo <CommonTree>(); Name.Construct(syntaxExtendedId); var syntaxParameters = syntaxAttributeUsage.GetChild(1).CastTo <CommonTree>(); if (syntaxParameters.ChildCount > 0) { syntaxParameters.Children.Cast <CommonTree>().ForEach(syntaxParameter => { var parameter = TreeHelper.GetExpression(this, Scope, syntaxParameter); parameter.Construct(syntaxParameter); FunctionCallParameters.Add(parameter); }); } }
private static IEnumerable <IInstruction> GetVariableReferenceInstructions(this ExtendedId extendedId) { return(GetLoadInstruction(extendedId.VariableDeclaration).AsList()); }
/// <summary> /// obsolete /// </summary> /// <param name="exId"></param> /// <param name="ilGenerator"></param> private void PopAndStore(ExtendedId exId, ILGenerator ilGenerator) { PopAndStore(exId.VariableDeclaration.FullName, exId.VariableDeclaration.Index, ilGenerator); }
private void GenerateExtendedId(ExtendedId extendedIdNode, ILGenerator ilGenerator) { LoadOntoStack(extendedIdNode, ilGenerator); }