Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
vala
vala
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 702
    • Issues 702
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge Requests 38
    • Merge Requests 38
  • Operations
    • Operations
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • Repository
    • Value Stream
  • External Wiki
    • External Wiki
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
  • GNOME
  • valavala
  • Issues
  • #534

Closed
Open
Opened Apr 01, 2016 by bugzilla-migration@bugzilla-migrationReporter

Null Coalescing Operator "??" evaluates both of expression when right side throws Error.

Submitted by Lim Jongrok

Link to original bug (#764440)

Description

Null Coalescing Operator "??" evaluates both of left and right side of expression, when right side throws Error.

This code:

public errordomain SomeError {
    DUMMY_CODE
}

public class Something {
    private int value;

    public Something (int value = 0) {
        message ("Construction: %d", value);
    }

    public Something.throws_error (int value = 0) throws SomeError {
        this (value);
    }
}

public Something create_throwing (int value = 0) throws SomeError {
    return new Something (value);
}

public Something? create_nullable (int value = 0) {
    return new Something (value);
}

public void main () {
    try {
        Something? a = new Something (10);
        Something b = a ?? create_throwing (11);
    
        Something? c = new Something (101);
        Something? d = c ?? create_nullable (102);
    }

    catch (SomeError e) {
        assert_not_reached ();
    }
}

Results in:

** Message: something.vala:9: Construction: 10
** Message: something.vala:9: Construction: 11
** Message: something.vala:9: Construction: 101

which means, create_throwing (11) is evaluated even a is not null. create_nullable (102) isn't evaluated as c is not null.

To upload designs, you'll need to enable LFS and have admin enable hashed storage. More information
Assignee
Assign to
0.48
Milestone
0.48
Assign milestone
Time tracking
None
Due date
None
Reference: GNOME/vala#534