summaryrefslogtreecommitdiff
path: root/source/compiler-core/slang-command-line-args.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/compiler-core/slang-command-line-args.h')
-rw-r--r--source/compiler-core/slang-command-line-args.h21
1 files changed, 16 insertions, 5 deletions
diff --git a/source/compiler-core/slang-command-line-args.h b/source/compiler-core/slang-command-line-args.h
index 7500c1a91..c18996005 100644
--- a/source/compiler-core/slang-command-line-args.h
+++ b/source/compiler-core/slang-command-line-args.h
@@ -17,6 +17,9 @@ struct CommandLineArg
SourceLoc loc; ///< The location of the arg
};
+/* This type ends up being really just a container for the sourceManager that has the CommandLine specific SourceLocs.
+That it would perhaps be better to just have SourceManager derive from RefObject, and then we could remove this
+type. */
class CommandLineContext : public RefObject
{
public:
@@ -27,6 +30,8 @@ public:
{
m_sourceManager.initialize(nullptr, fileSystemExt);
// Make range start from high value, so can be differentiated from other uses
+ // That this doesn't not assume exclusive use of this range - just that in normal use scenarios
+ // there is no confusion, and using the wrong source manager, will typically report nothing is found.
m_sourceManager.allocateSourceRange(~(~SourceLoc::RawValue(0) >> 1));
}
@@ -128,15 +133,22 @@ struct DownstreamArgs
};
};
+ struct Entry
+ {
+ String name; ///< The name of the 'tool' that these args are associated with
+ CommandLineArgs args; ///< The args to be passed to the tool
+ };
+
/// Add a name, returns the index
Index addName(const String& name);
/// Find the index of a name. Returns < 0 if not found.
- Index findName(const String& name) const { return m_names.indexOf(name); }
+ Index findName(const String& name) const { return m_entries.findFirstIndex([&](const Entry& entry) -> bool { return entry.name == name; }); }
/// Get the args at the nameIndex
- CommandLineArgs& getArgsAt(Index nameIndex) { return m_args[nameIndex]; }
+ CommandLineArgs& getArgsAt(Index nameIndex) { return m_entries[nameIndex].args; }
/// Get args by name - will assert if name isn't found
CommandLineArgs& getArgsByName(char* name);
+ const CommandLineArgs& getArgsByName(char* name) const;
/// Looks for '-X' expressions, removing them from ioArgs and putting in appropriate args
SlangResult stripDownstreamArgs(CommandLineArgs& ioArgs, Flags flags, DiagnosticSink* sink);
@@ -155,10 +167,9 @@ struct DownstreamArgs
protected:
Index _findOrAddName(SourceLoc loc, const UnownedStringSlice& name, Flags flags, DiagnosticSink* sink);
- List<String> m_names;
- List<CommandLineArgs> m_args;
+ List<Entry> m_entries; ///< All of the entries
- RefPtr<CommandLineContext> m_context;
+ RefPtr<CommandLineContext> m_context; ///< The context that is being used (primarily for loc tracking) across all entries/args
};