// 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 commandLineFlags = { 'annotations': 'Emit Dart annotations', 'local-var-info': 'Emit debug information about local variables', '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', 'record-coverage': 'Emit instructions and metadata for recording coverage', }; bool enableAsserts; bool emitSourcePositions; bool emitLocalVarInfo; bool emitAnnotations; bool emitInstanceFieldInitializers; bool omitAssertSourcePositions; bool keepUnreachableCode; bool showBytecodeSizeStatistics; bool isClosureContextLoweringEnabled; bool embedSourceText; bool recordCoverage; BytecodeOptions({ this.enableAsserts = false, this.emitSourcePositions = false, this.emitLocalVarInfo = false, this.emitAnnotations = false, this.emitInstanceFieldInitializers = false, this.omitAssertSourcePositions = false, this.keepUnreachableCode = false, this.showBytecodeSizeStatistics = false, this.isClosureContextLoweringEnabled = false, this.embedSourceText = false, this.recordCoverage = false, }) {} void parseCommandLineFlags(List? 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 '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; case 'record-coverage': recordCoverage = true; break; default: throw 'Unexpected bytecode flag $flag'; } } } }