public override void GenCode(ICodeGenerator cg) { var gen = cg.GetGenerator; ArrayType arrayType = (LValue.ReturnType.PrimitiveType as ArrayType); LValue.GenCode(cg); IndexInstruction.GenCode(cg); gen.Emit(OpCodes.Ldelem, arrayType.BaseType.ILType); }
public void AssignValue(ICodeGenerator cg) { var gen = cg.GetGenerator; ArrayType arrayType = (LValue.ReturnType.PrimitiveType as ArrayType); LocalBuilder aux = gen.DeclareLocal(arrayType.BaseType.ILType); gen.Emit(OpCodes.Stloc, aux); LValue.GenCode(cg); IndexInstruction.GenCode(cg); gen.Emit(OpCodes.Ldloc, aux); gen.Emit(OpCodes.Stelem, arrayType.BaseType.ILType); }
public override bool CheckSemantic(List <Error> errors, SymbolTable symbolTable) { if (base.CheckSemantic(errors, symbolTable) & IndexInstruction.CheckSemantic(errors, symbolTable)) { TypeExpression resultType = LValue.ReturnType.SubscriptAt(IndexInstruction.ReturnType); if (resultType is ErrorType) { errors.Add(new Error((resultType as ErrorType).Message, Line, CharPositionInLine)); } else { ReturnType = resultType; _isLValue = (LValue is IAssignable); Scope = symbolTable.TopScope.Clone(); return(true); } } ReturnType = TypeExpression.ErrorType; return(false); }