Ast environment refactoring
This commit is contained in:
@@ -48,19 +48,27 @@ uses
|
||||
constructor TAstLowerer.Create;
|
||||
var
|
||||
op: TScalar.TBinaryOp;
|
||||
uOp: TScalar.TUnaryOp; // Added for unary
|
||||
uOp: TScalar.TUnaryOp;
|
||||
begin
|
||||
inherited Create;
|
||||
|
||||
// Operator folding maps
|
||||
FBinaryOperators := TDictionary<string, TScalar.TBinaryOp>.Create;
|
||||
for op := Low(TScalar.TBinaryOp) to High(TScalar.TBinaryOp) do
|
||||
FBinaryOperators.Add(op.ToString, op);
|
||||
|
||||
FBinaryOperators.Add('+', TScalar.TBinaryOp.Add);
|
||||
FBinaryOperators.Add('-', TScalar.TBinaryOp.Subtract);
|
||||
FBinaryOperators.Add('*', TScalar.TBinaryOp.Multiply);
|
||||
FBinaryOperators.Add('/', TScalar.TBinaryOp.Divide);
|
||||
FBinaryOperators.Add('=', TScalar.TBinaryOp.Equal);
|
||||
FBinaryOperators.Add('<>', TScalar.TBinaryOp.NotEqual);
|
||||
FBinaryOperators.Add('<', TScalar.TBinaryOp.Less);
|
||||
FBinaryOperators.Add('<=', TScalar.TBinaryOp.LessOrEqual);
|
||||
FBinaryOperators.Add('>', TScalar.TBinaryOp.Greater);
|
||||
FBinaryOperators.Add('>=', TScalar.TBinaryOp.GreaterOrEqual);
|
||||
|
||||
FUnaryOperators := TDictionary<string, TScalar.TUnaryOp>.Create;
|
||||
for uOp := Low(TScalar.TUnaryOp) to High(TScalar.TUnaryOp) do // Changed
|
||||
FUnaryOperators.Add(uOp.ToString, uOp);
|
||||
// Note: '-' is handled as a special case in VisitFunctionCall
|
||||
|
||||
FUnaryOperators.Add('not', TScalar.TUnaryOp.Not);
|
||||
end;
|
||||
|
||||
destructor TAstLowerer.Destroy;
|
||||
@@ -95,7 +103,7 @@ begin
|
||||
if Node.Callee.Kind = akIdentifier then
|
||||
begin
|
||||
calleeIdentifier := Node.Callee.AsIdentifier;
|
||||
nodeType := Node.StaticType;
|
||||
nodeType := Node.StaticType; // Get type from (un-lowered) node
|
||||
|
||||
if (Length(Node.Arguments) = 2) then
|
||||
begin
|
||||
|
||||
Reference in New Issue
Block a user