94c325a889
Currently the @pramga('vm:exact-result-type') annotation only works if
the function is a recognized method. This change changes that to make
the VM just look if a function has the annotation (no matter if it's
also in the list of recognized methods or not).
Furthermore this CL lets the type propgagator use
@pragma('vm:exact-result-type') annotations to narrow the [CompileType]
set on [LoadFieldInstr]s.
Since the @pragma is a general feature, this CL moves the
`Function::FindPragma()` to `Library::FindPragma` (which is where any
other metadata lookup happens). We also let the `FindPragma` accept any
of Class/Function/Field objects.
Furthermore the `FindPragma()` function is fixed to handle the case
when the evaluation of the metadata results in an error.
In this case we simply claim to not have found a pragma annotation.
Issue https://github.com/dart-lang/sdk/issues/31954
Change-Id: If03f566e334cd53549985823ee3dd6b5e9672969
Reviewed-on: https://dart-review.googlesource.com/c/85163
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
60 lines
1.9 KiB
Dart
60 lines
1.9 KiB
Dart
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
// part of "common_patch.dart";
|
|
|
|
@patch
|
|
@pragma("vm:entry-point")
|
|
class _Platform {
|
|
@patch
|
|
static int _numberOfProcessors() native "Platform_NumberOfProcessors";
|
|
@patch
|
|
static String _pathSeparator() native "Platform_PathSeparator";
|
|
@patch
|
|
static String _operatingSystem() native "Platform_OperatingSystem";
|
|
@patch
|
|
static _operatingSystemVersion() native "Platform_OperatingSystemVersion";
|
|
@patch
|
|
static _localHostname() native "Platform_LocalHostname";
|
|
@patch
|
|
static _executable() native "Platform_ExecutableName";
|
|
@patch
|
|
static _resolvedExecutable() native "Platform_ResolvedExecutableName";
|
|
@patch
|
|
static _environment() native "Platform_Environment";
|
|
@patch
|
|
static List<String> _executableArguments()
|
|
native "Platform_ExecutableArguments";
|
|
@patch
|
|
static String _version() native "Platform_GetVersion";
|
|
|
|
@patch
|
|
static String _localeName() native "Platform_LocaleName";
|
|
|
|
@patch
|
|
static String _packageRoot() => VMLibraryHooks.packageRootString;
|
|
@patch
|
|
static String _packageConfig() => VMLibraryHooks.packageConfigString;
|
|
|
|
@patch
|
|
static Uri _script() => VMLibraryHooks.platformScript;
|
|
|
|
// This script singleton is written to by the embedder if applicable.
|
|
@pragma("vm:entry-point")
|
|
static void set _nativeScript(String path) {
|
|
VMLibraryHooks.platformScript = (() {
|
|
if (path.startsWith('http:') ||
|
|
path.startsWith('https:') ||
|
|
path.startsWith('package:') ||
|
|
path.startsWith('dart:') ||
|
|
path.startsWith('data:') ||
|
|
path.startsWith('file:')) {
|
|
return Uri.parse(path);
|
|
} else {
|
|
return Uri.base.resolveUri(new Uri.file(path));
|
|
}
|
|
});
|
|
}
|
|
}
|