Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

make 'throw foo' an expression #587

Closed
DartBot opened this issue Nov 24, 2011 · 9 comments
Closed

make 'throw foo' an expression #587

DartBot opened this issue Nov 24, 2011 · 9 comments
Assignees
Labels
area-language Dart language related items (some items might be better tracked at github.com/dart-lang/language). type-enhancement A request for a change that isn't a bug
Milestone

Comments

@DartBot
Copy link

DartBot commented Nov 24, 2011

This issue was originally filed by sammcca...@google.com


If throwStatement was an expression instead, this would allow:

() => throw new Exception("foo")
z = foo ? bar : throw new BazException()

If it was of static type ⊥ (like null) then these should be warning-free, too.

@DartBot
Copy link
Author

DartBot commented Nov 24, 2011

This comment was originally written by drfibonacci@google.com


Removed Type-Defect label.
Added Type-Enhancement, Area-Language, Triaged labels.

@gbracha
Copy link
Contributor

gbracha commented Dec 14, 2011

Generally, expressions compose better than statements and should be preferred. One reason why this might be tricky in Dart is because we need to compile to Javascript.


Set owner to @gbracha.
Added Accepted label.

@rakudrama
Copy link
Member

JavaScript is not a problem - other issues already cause the compiler to generate JavaScript that calls a helper function to do the actual JavaScript 'throw', so the compiler is already generating code suitable for an expression context. Even if the other issues went away, we could use a helper expressly for converting from statement to expression context when needed.

I would welcome the combination of => and throw. It would clean up the appearance of code that is incomplete:

   String get prettyVersion() => throw const NotImplementedException();

or throws on mutators:

   add(E elem) => throw new UnsupportedOperationException('Cannot add to immutable list');

I don't see it as a high priority as I believe the statement could be promoted to an expression after v1 without breaking anything.

@gbracha
Copy link
Contributor

gbracha commented Dec 14, 2011

That's all good news. I'll see if/when we can act on this.

@anders-sandholm
Copy link
Contributor

Added this to the Later milestone.

@anders-sandholm
Copy link
Contributor

Removed this from the Later milestone.
Added this to the M1 milestone.

@rakudrama
Copy link
Member

Issue #3370 has been merged into this issue.

@lexprfuncall
Copy link

I tripped over this today when trying to validate constructor arguments during the assignment to a final field within an initializer list.

class _Float32ArrayView extends _ByteArrayViewBase implements Float32List {
  _Float32ArrayView(ByteArray array, [int offsetInBytes = 0, int length])
    : _array = array,
      _offset = (offsetInBytes is int) ? offsetInBytes : (throw new IllegalArgumentException()),
      _length = ((length === null) ?
                 ((array.lengthInBytes() - offsetInBytes) % _BYTES_PER_ELEMENT) : length) { ... }

cc file. out/DebugIA32/obj/gen/snapshot_gen.cc
 'bootstrap': Error: line 2953 pos 54: unexpected token 'throw'
    _offset = offsetInBytes is int ? offsetInBytes : throw IllegalArgumentException(),

@gbracha
Copy link
Contributor

gbracha commented Aug 31, 2012

Fixed in 0.11 draft.

Corresponding bugs:

Analyzer issue #4872
VM issue #4873
dart2js issue #4874


Added Done label.

@DartBot DartBot added Type-Enhancement area-language Dart language related items (some items might be better tracked at github.com/dart-lang/language). labels Aug 31, 2012
@DartBot DartBot added this to the M1 milestone Aug 31, 2012
@kevmoo kevmoo added type-enhancement A request for a change that isn't a bug and removed type-enhancement labels Mar 1, 2016
nex3 pushed a commit that referenced this issue Aug 31, 2016
copybara-service bot pushed a commit that referenced this issue Nov 16, 2022
…ackage_config, path, shelf, term_glyph, test_reflective_loader, webdev, webkit_inspection_protocol, yaml

Revisions updated by `dart tools/rev_sdk_deps.dart`.

cli_util (https://github.com/dart-lang/cli_util/compare/b0adbba..edcf1c3):
  edcf1c3  2022-11-15  Devon Carew  blast_repo fixes (#71)

csslib (https://github.com/dart-lang/csslib/compare/ba2eb2d..34203c0):
  34203c0  2022-11-15  Kevin Moore  blast_repo fixes (#154)

dartdoc (https://github.com/dart-lang/dartdoc/compare/08e3098..dc502d0):
  dc502d08  2022-11-15  Sam Rawlins  Move much PackageWarning logic _out_ of PackageGraph, into the enum. (#3251)
  ad651b15  2022-11-15  Sam Rawlins  Move the e2e source-link test to a unit test (#3254)
  d14c680c  2022-11-11  Sam Rawlins  Make many Strings in DocumentationComment non-nullable (#3243)
  92afb9bb  2022-11-10  dependabot[bot]  Bump github/codeql-action from 2.1.29 to 2.1.31 (#3246)

http (https://github.com/dart-lang/http/compare/6339026..d56141d):
  d56141d  2022-11-11  Brian Quinlan  Upgrade to ffigen ^7.2 and remove unnecessary casts (#820)
  d95a544  2022-11-10  Brian Quinlan  Add a more complete implementation for `URLSessionTask`. (#818)

intl (https://github.com/dart-lang/intl/compare/442193c..a127902):
  a127902  2022-11-16  Kevin Moore  blast_repo fixes (#510)

matcher (https://github.com/dart-lang/matcher/compare/6a9b83b..9051de0):
  9051de0  2022-11-15  Kevin Moore  blast_repo fixes (#197)

mockito (https://github.com/dart-lang/mockito/compare/748e88e..347d3e4):
  347d3e4  2022-11-14  Kevin Moore  blast_repo fixes (#587)

package_config (https://github.com/dart-lang/package_config/compare/cff98c9..abb4aec):
  abb4aec  2022-11-15  Kevin Moore  blast_repo fixes (#127)

path (https://github.com/dart-lang/path/compare/58ba22c..12ce876):
  12ce876  2022-11-14  hellohuanlin  Support more arguments in path.join API (#130)

shelf (https://github.com/dart-lang/shelf/compare/5fd2593..1c21047):
  1c21047  2022-11-11  Devon Carew  update the no-response.yml configuration (#308)

term_glyph (https://github.com/dart-lang/term_glyph/compare/ec7cf7b..822cd5b):
  822cd5b  2022-11-15  Kevin Moore  blast_repo fixes (#29)

test_reflective_loader (https://github.com/dart-lang/test_reflective_loader/compare/ef934b7..52b6753):
  52b6753  2022-11-15  Kevin Moore  blast_repo fixes (#42)

webdev (https://github.com/dart-lang/webdev/compare/22f6271..3ec168f):
  3ec168f  2022-11-15  Anna Gringauze  Add --enable-experience flag and pass it to the expression compiler service (#1794)
  72272dd  2022-11-10  Elliott Brooks (she/her)  Include a settings page for configuring the Dart Debug Extension (#1776)
  73839e7  2022-11-10  Elliott Brooks (she/her)  Log entire exception message instead of first line (#1782)

webkit_inspection_protocol (https://github.com/google/webkit_inspection_protocol.dart/compare/b825c8f..ddb624c):
  ddb624c  2022-11-14  Kevin Moore  blast_repo fixes (#95)

yaml (https://github.com/dart-lang/yaml/compare/fda5b15..f699275):
  f699275  2022-11-15  Devon Carew  Merge pull request #131 from dart-lang/blast_repo-2022_11_15T20_23_04
  8f6a5f7  2022-11-15  Kevin Moore  blast_repo fixes

Change-Id: I5d55d733b7f9256edf4f44229cc810e827c23f7d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/270240
Auto-Submit: Devon Carew <devoncarew@google.com>
Commit-Queue: Kevin Moore <kevmoo@google.com>
Reviewed-by: Kevin Moore <kevmoo@google.com>
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-language Dart language related items (some items might be better tracked at github.com/dart-lang/language). type-enhancement A request for a change that isn't a bug
Projects
None yet
Development

No branches or pull requests

7 participants