public override void WriteFixedArrayDeclaration(FixedArrayDeclaration s) { BeginLine(); var fat = (FixedArrayType)s.Variable.ValueType; WriteType(s.Source, fat.ElementType); Write(" " + s.Variable.Name + "["); if (fat.OptionalSize != null) { WriteExpression(fat.OptionalSize); } else if (s.OptionalInitializer != null) { Write(s.OptionalInitializer.Length); } else { Log.Error(s.Source, ErrorCode.I0000, "Unknown length of 'fixed' array"); } EndLine("];"); if (s.OptionalInitializer != null) { for (int i = 0; i < s.OptionalInitializer.Length; i++) { BeginLine(s.Variable.Name + "[" + i + "] = "); WriteExpression(s.OptionalInitializer[i]); EndLine(";"); } } }
StageValue ProcessFixedArrayDeclaration(FixedArrayDeclaration s) { Expression[] initializer = null; var minStage = MetaStage.Const; var maxStage = MetaStage.Max; if (s.OptionalInitializer != null) { var stageValues = new StageValue[s.OptionalInitializer.Length]; for (int i = 0; i < stageValues.Length; i++) { var v = stageValues[i] = ProcessValue(s.OptionalInitializer[i]); if (v.MinStage > minStage) { minStage = v.MinStage; } if (v.MaxStage < maxStage) { maxStage = v.MaxStage; } } initializer = new Expression[stageValues.Length]; if (maxStage < minStage) { maxStage = minStage; } for (int i = 0; i < stageValues.Length; i++) { initializer[i] = ProcessStage(stageValues[i], minStage, maxStage).Value; } } return(new StageValue(new PlaceholderArray(s.Source, s.Variable.ValueType, initializer), minStage, maxStage)); }
public virtual void WriteFixedArrayDeclaration(FixedArrayDeclaration s) { UnsupportedStatement(s); /* * BeginLine(); * * var fat = (FixedArrayType)s.Variable.DataType; * * WriteDataType(s.Source, fat.ElementType); * Write(" " + s.Variable.Name + "["); * * if (fat.OptionalSize != null) * WriteExpression(fat.OptionalSize); * * Write("]"); * * if (s.OptionalInitializer != null) * { * EndLine(" ="); * PushScope(); * * foreach (var init in s.OptionalInitializer) * { * BeginLine(); * WriteExpression(init); * EndLine(","); * } * * PopScopeSemicolon(); * } * else * { * EndLine(";"); * } */ }