|
@@ -33,7 +33,7 @@ TYPE
|
|
DynamicArrayAddCallGenerator = RECORD(Procedure.CallGenerator)
|
|
DynamicArrayAddCallGenerator = RECORD(Procedure.CallGenerator)
|
|
cx: LanguageContext.PType;
|
|
cx: LanguageContext.PType;
|
|
elementsType: Types.PType;
|
|
elementsType: Types.PType;
|
|
- argCode: Procedure.PArgumentsCode
|
|
|
|
|
|
+ code: STRING
|
|
END;
|
|
END;
|
|
|
|
|
|
DynamicArrayMethod = RECORD(Procedure.Std)
|
|
DynamicArrayMethod = RECORD(Procedure.Std)
|
|
@@ -150,26 +150,32 @@ END DynamicArrayMethodField.asVar;
|
|
|
|
|
|
PROCEDURE DynamicArrayAddCallGenerator.handleArgument(e: Code.PExpression);
|
|
PROCEDURE DynamicArrayAddCallGenerator.handleArgument(e: Code.PExpression);
|
|
BEGIN
|
|
BEGIN
|
|
- IF SELF.argCode # NIL THEN
|
|
|
|
|
|
+ IF SELF.code # "" THEN
|
|
Errors.raise("method 'add' expects one argument, got many");
|
|
Errors.raise("method 'add' expects one argument, got many");
|
|
END;
|
|
END;
|
|
|
|
|
|
- SELF.argCode := Procedure.makeArgumentsCode(SELF.cx);
|
|
|
|
|
|
+ argCode <- Procedure.makeArgumentsCode(SELF.cx);
|
|
Procedure.checkArgument(
|
|
Procedure.checkArgument(
|
|
e,
|
|
e,
|
|
Types.makeProcedureArgument(SELF.elementsType, FALSE),
|
|
Types.makeProcedureArgument(SELF.elementsType, FALSE),
|
|
0,
|
|
0,
|
|
- SELF.argCode,
|
|
|
|
|
|
+ argCode,
|
|
SELF.cx.types);
|
|
SELF.cx.types);
|
|
|
|
+ SELF.code := argCode.result();
|
|
|
|
+
|
|
|
|
+ t <- e.type();
|
|
|
|
+ IF (t IS Types.PRecord) OR (t IS Types.PArray) THEN
|
|
|
|
+ SELF.code := SELF.cx.rtl.clone(SELF.code);
|
|
|
|
+ END;
|
|
END DynamicArrayAddCallGenerator.handleArgument;
|
|
END DynamicArrayAddCallGenerator.handleArgument;
|
|
|
|
|
|
PROCEDURE DynamicArrayAddCallGenerator.end(): Code.PExpression;
|
|
PROCEDURE DynamicArrayAddCallGenerator.end(): Code.PExpression;
|
|
BEGIN
|
|
BEGIN
|
|
- IF SELF.argCode = NIL THEN
|
|
|
|
|
|
+ IF SELF.code = "" THEN
|
|
Errors.raise("method 'add' expects one argument, got nothing");
|
|
Errors.raise("method 'add' expects one argument, got nothing");
|
|
END;
|
|
END;
|
|
RETURN Code.makeSimpleExpression(
|
|
RETURN Code.makeSimpleExpression(
|
|
- "(" + SELF.argCode.result() + ")",
|
|
|
|
|
|
+ "(" + SELF.code + ")",
|
|
NIL)
|
|
NIL)
|
|
END DynamicArrayAddCallGenerator.end;
|
|
END DynamicArrayAddCallGenerator.end;
|
|
|
|
|