private FirstPassResult HandleCodeFirstPass( IExpression <T> expression, AssemblyContext <T> assemblyContext) { Code <T> code = (Code <T>)expression; if (code.IsEmpty) { return(FirstPassResult.Invalid()); } if (HandleBuiltInCode(code, assemblyContext, false)) { return(FirstPassResult.Invalid()); } var paramTypes = code.Parameters.Select(EAType.GetType).ToArray(); var templateError = storer.FindTemplate(code.CodeName.Name, paramTypes); if (templateError.CausedError) { assemblyContext.AddError(code, templateError); return(FirstPassResult.Invalid()); } else { var template = templateError.Result; int oldOffset = assemblyContext.CurrentOffset; assemblyContext.CurrentOffset += template.GetLengthBytes(code.Parameters); return(FirstPassResult.Valid(code, oldOffset, template)); } }
private FirstPassResult HandleScopeFirstPass( IExpression <T> expression, AssemblyContext <T> assemblyContext) { assemblyContext.SetScopeStructure(expression); return(FirstPassResult.Invalid()); }
private FirstPassResult HandleLabelFirstPass( IExpression <T> expression, AssemblyContext <T> assemblyContext) { LabeledExpression <T> labelExp = (LabeledExpression <T>)expression; assemblyContext.CurrentScope.AddNewSymbol((labelExp).LabelName, new ValueExpression <T>(intType.FromInt(assemblyContext.CurrentOffset), default(FilePosition))); return(FirstPassResult.Invalid()); }
private FirstPassResult HandleAssignmentFirstPass( IExpression <T> expression, AssemblyContext <T> assemblyContext) { Assingment <T> assignment = (Assingment <T>)expression; if (assignment.VariableCount != 0) { assemblyContext.AddError(assignment, "Assignments with parameters aren't supported."); } else { assemblyContext.CurrentScope.AddNewSymbol(assignment.Name.Name, assignment.Result); } return(FirstPassResult.Invalid()); }