1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-22 09:38:01 +02:00

Fixed params expression with ref values

This commit is contained in:
Brian Fiete 2020-05-19 09:42:11 -07:00
parent 4fe6bcaa86
commit e82daf74d4
9 changed files with 29 additions and 45 deletions

View file

@ -301,11 +301,6 @@ void BfStructuralVisitor::Visit(BfParameterDeclaration* paramDecl)
Visit(paramDecl->ToBase());
}
void BfStructuralVisitor::Visit(BfParamsExpression* paramsExpr)
{
Visit(paramsExpr->ToBase());
}
void BfStructuralVisitor::Visit(BfTypeAttrExpression* typeAttrExpr)
{
Visit(typeAttrExpr->ToBase());

View file

@ -268,7 +268,6 @@ class BfOperatorDeclaration;
class BfFieldDeclaration;
class BfEnumCaseDeclaration;
class BfParameterDeclaration;
class BfParamsExpression;
class BfForStatement;
class BfUsingStatement;
class BfDoStatement;
@ -454,8 +453,7 @@ public:
virtual void Visit(BfNullableTypeRef* typeRef);
virtual void Visit(BfVariableDeclaration* varDecl);
virtual void Visit(BfLocalMethodDeclaration* methodDecl);
virtual void Visit(BfParameterDeclaration* paramDecl);
virtual void Visit(BfParamsExpression* paramsExpr);
virtual void Visit(BfParameterDeclaration* paramDecl);
virtual void Visit(BfTypeAttrExpression* typeAttrExpr);
virtual void Visit(BfTypeOfExpression* typeOfExpr);
virtual void Visit(BfSizeOfExpression* sizeOfExpr);
@ -2472,14 +2470,6 @@ public:
BfTokenNode* mRefToken;
}; BF_AST_DECL(BfRefTypeRef, BfElementedTypeRef);
class BfParamsExpression : public BfExpression
{
public:
BF_AST_TYPE(BfParamsExpression, BfExpression);
BfTokenNode* mParamsToken;
}; BF_AST_DECL(BfParamsExpression, BfExpression);
class BfTypeAttrExpression : public BfExpression
{
public:

View file

@ -446,13 +446,6 @@ void BfElementVisitor::Visit(BfParameterDeclaration* paramDecl)
VisitChild(paramDecl->mModToken); // 'Params'
}
void BfElementVisitor::Visit(BfParamsExpression* paramsExpr)
{
Visit(paramsExpr->ToBase());
VisitChild(paramsExpr->mParamsToken);
}
void BfElementVisitor::Visit(BfTypeAttrExpression* typeAttrExpr)
{
Visit(typeAttrExpr->ToBase());

View file

@ -64,8 +64,7 @@ public:
virtual void Visit(BfNullableTypeRef* typeRef);
virtual void Visit(BfVariableDeclaration* varDecl);
virtual void Visit(BfLocalMethodDeclaration* methodDecl);
virtual void Visit(BfParameterDeclaration* paramDecl);
virtual void Visit(BfParamsExpression* paramsExpr);
virtual void Visit(BfParameterDeclaration* paramDecl);
virtual void Visit(BfTypeAttrExpression* typeAttrExpr);
virtual void Visit(BfDefaultExpression* defaultExpr);
virtual void Visit(BfUninitializedExpression* uninitializedExpr);

View file

@ -4134,12 +4134,10 @@ void BfExprEvaluator::ResolveArgValues(BfResolvedArgs& resolvedArgs, BfResolveAr
{
BfResolvedArg compositeResolvedArg;
auto compositeLocalVar = methodState->mLocals[localVar->mLocalVarIdx + compositeIdx + 1];
auto argValue = exprEvaluator.LoadLocal(compositeLocalVar);
auto argValue = exprEvaluator.LoadLocal(compositeLocalVar, true);
if (argValue)
{
if (argValue.mType->IsRef())
argValue.mKind = BfTypedValueKind_Value;
else if (!argValue.mType->IsStruct())
if (!argValue.mType->IsStruct())
argValue = mModule->LoadValue(argValue, NULL, exprEvaluator.mIsVolatileReference);
}
resolvedArg.mTypedValue = argValue;
@ -8052,11 +8050,6 @@ void BfExprEvaluator::Visit(BfCollectionInitializerExpression* arrayInitExpr)
mModule->Fail("Collection initializer not usable here", arrayInitExpr);
}
void BfExprEvaluator::Visit(BfParamsExpression* paramsExpr)
{
mModule->Fail("Params expression is only usable as a call parameter", paramsExpr);
}
void BfExprEvaluator::Visit(BfTypeOfExpression* typeOfExpr)
{
auto typeType = mModule->ResolveTypeDef(mModule->mCompiler->mTypeTypeDef);

View file

@ -419,8 +419,7 @@ public:
virtual void Visit(BfBaseExpression* baseExpr) override;
virtual void Visit(BfMixinExpression* mixinExpr) override;
virtual void Visit(BfSizedArrayCreateExpression* createExpr) override;
virtual void Visit(BfCollectionInitializerExpression* initExpr) override;
virtual void Visit(BfParamsExpression* paramsExpr) override;
virtual void Visit(BfCollectionInitializerExpression* initExpr) override;
virtual void Visit(BfTypeOfExpression* typeOfExpr) override;
virtual void Visit(BfSizeOfExpression* sizeOfExpr) override;
virtual void Visit(BfAlignOfExpression* alignOfExpr) override;

View file

@ -1462,13 +1462,6 @@ void BfPrinter::Visit(BfParameterDeclaration* paramDecl)
Visit(paramDecl->ToBase());
}
void BfPrinter::Visit(BfParamsExpression* paramsExpr)
{
Visit(paramsExpr->ToBase());
VisitChild(paramsExpr->mParamsToken);
}
void BfPrinter::Visit(BfTypeOfExpression* typeOfExpr)
{
Visit(typeOfExpr->ToBase());

View file

@ -146,8 +146,7 @@ public:
virtual void Visit(BfPointerTypeRef* typeRef) override;
virtual void Visit(BfNullableTypeRef* typeRef) override;
virtual void Visit(BfVariableDeclaration* varDecl) override;
virtual void Visit(BfParameterDeclaration* paramDecl) override;
virtual void Visit(BfParamsExpression* paramsExpr) override;
virtual void Visit(BfParameterDeclaration* paramDecl) override;
virtual void Visit(BfTypeOfExpression* typeOfExpr) override;
virtual void Visit(BfSizeOfExpression* sizeOfExpr) override;
virtual void Visit(BfDefaultExpression* defaultExpr) override;