Skip to content

Commit ccef154

Browse files
committed
Fix __ptr__ issues
1 parent 12188f8 commit ccef154

3 files changed

Lines changed: 3 additions & 19 deletions

File tree

codon/parser/visitors/translate/translate.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ void TranslateVisitor::visit(CallExpr *expr) {
295295
auto pv = make<ir::PointerValue>(expr, val->getVar(), members);
296296
if (pre) {
297297
pre->setValue(pv);
298+
result = pre;
298299
} else {
299300
result = pv;
300301
}

codon/parser/visitors/typecheck/special.cpp

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -503,29 +503,15 @@ Expr *TypecheckVisitor::transformPtr(CallExpr *expr) {
503503
auto t = extractClassType(head);
504504
if (!t)
505505
return nullptr;
506-
if (!t->isRecord())
506+
if (!last && !t->isRecord())
507507
E(Error::CALL_PTR_VAR, expr->begin()->getExpr());
508508

509509
if (auto id = cast<IdExpr>(head)) {
510510
auto val = id ? ctx->find(id->getValue(), getTime()) : nullptr;
511-
if (!val || !val->isVar()) {
511+
if (!val || !val->isVar())
512512
E(Error::CALL_PTR_VAR, expr->begin()->getExpr());
513-
}
514513
break;
515514
} else if (auto dot = cast<DotExpr>(head)) {
516-
if (last && !t->isRecord()) {
517-
E(Error::CALL_PTR_VAR, expr->begin()->getExpr());
518-
} else if (!t->isRecord()) {
519-
auto tmp = getTemporaryVar("ptr");
520-
auto newDot = N<DotExpr>(N<IdExpr>(tmp), dot->getMember());
521-
std::ranges::reverse(members);
522-
for (auto &m : members)
523-
newDot = N<DotExpr>(newDot, m);
524-
return transform(N<StmtExpr>(
525-
N<AssignStmt>(N<IdExpr>(tmp), dot->getExpr()),
526-
N<CallExpr>(N<IdExpr>(getMangledFunc("std.internal.core", "__ptr__")),
527-
newDot)));
528-
}
529515
head = dot->getExpr();
530516
} else {
531517
E(Error::CALL_PTR_VAR, expr->begin()->getExpr());

test/parser/typecheck/test_call.codon

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,6 @@ print(x) #: (b: (a: (n: 55)))
6262
#%% call_ptr_error,barebones
6363
__ptr__(1) #! __ptr__() only takes identifiers or tuple fields as arguments
6464

65-
#%% call_ptr_error_2,barebones
66-
__ptr__([1]) #! __ptr__() only takes identifiers or tuple fields as arguments
67-
6865
#%% call_ptr_error_3,barebones
6966
v = 1
7067
__ptr__(v, 1) #! __ptr__() takes 1 arguments (2 given)

0 commit comments

Comments
 (0)