Files
sdk/pkg/dart2bytecode/lib/options.dart
T
Tess Strickland 19d6b1d003 [vm,dyn_modules] Emit script file contents in bytecode when requested.
To enable this for pkg/dart2bytecode/bin/dart2bytecode:
dart2bytecode --bytecode-options=script-file-contents ...

This option is disabled by default, but enabled by the bytecode kernel
service and by the test runner when running in non-product
configurations.

TEST=pkg/vm_service/test/local_variable_declaration

Cq-Include-Trybots: luci.dart.try:vm-dyn-linux-debug-x64-try,vm-aot-dyn-linux-debug-x64-try,vm-aot-dyn-linux-product-x64-try,vm-dyn-mac-debug-arm64-try
Change-Id: Ibeeb7d212f6be27002b972d67867b2581d97a0aa
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/449860
Commit-Queue: Tess Strickland <sstrickl@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2025-09-26 05:06:22 -07:00

86 lines
2.8 KiB
Dart

// Copyright (c) 2024, 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.
/// Collection of options for bytecode generator.
class BytecodeOptions {
static Map<String, String> commandLineFlags = {
'annotations': 'Emit Dart annotations',
'local-var-info': 'Emit debug information about local variables',
'debugger-stops': 'Emit bytecode instructions for stopping in the debugger',
'show-bytecode-size-stat': 'Show bytecode size breakdown',
'source-positions': 'Emit source positions',
'instance-field-initializers': 'Emit separate instance field initializers',
'keep-unreachable-code':
'Do not remove unreachable code (useful if collecting code coverage)',
'closure-context-lowering':
'Use the closure context lowering in Kernel AST instead of computing it',
'embed-source-text': 'Embed the source text of scripts',
};
bool enableAsserts;
bool emitSourcePositions;
bool emitLocalVarInfo;
bool emitDebuggerStops;
bool emitAnnotations;
bool emitInstanceFieldInitializers;
bool omitAssertSourcePositions;
bool keepUnreachableCode;
bool showBytecodeSizeStatistics;
bool isClosureContextLoweringEnabled;
bool embedSourceText;
BytecodeOptions({
this.enableAsserts = false,
this.emitSourcePositions = false,
this.emitLocalVarInfo = false,
this.emitDebuggerStops = false,
this.emitAnnotations = false,
this.emitInstanceFieldInitializers = false,
this.omitAssertSourcePositions = false,
this.keepUnreachableCode = false,
this.showBytecodeSizeStatistics = false,
this.isClosureContextLoweringEnabled = false,
this.embedSourceText = false,
}) {}
void parseCommandLineFlags(List<String>? flags) {
if (flags == null) {
return;
}
for (String flag in flags) {
switch (flag) {
case 'source-positions':
emitSourcePositions = true;
break;
case 'local-var-info':
emitLocalVarInfo = true;
break;
case 'debugger-stops':
emitDebuggerStops = true;
break;
case 'annotations':
emitAnnotations = true;
break;
case 'instance-field-initializers':
emitInstanceFieldInitializers = true;
break;
case 'keep-unreachable-code':
keepUnreachableCode = true;
break;
case 'show-bytecode-size-stat':
showBytecodeSizeStatistics = true;
break;
case 'closure-context-lowering':
isClosureContextLoweringEnabled = true;
break;
case 'embed-source-text':
embedSourceText = true;
break;
default:
throw 'Unexpected bytecode flag $flag';
}
}
}
}