Skip to content

Commit

Permalink
refactor: Operand checking
Browse files Browse the repository at this point in the history
  • Loading branch information
slavek-kucera authored May 13, 2024
1 parent ddf51a0 commit 5879157
Show file tree
Hide file tree
Showing 15 changed files with 482 additions and 567 deletions.
71 changes: 34 additions & 37 deletions parser_library/src/checking/asm_instr_check.cpp

Large diffs are not rendered by default.

66 changes: 33 additions & 33 deletions parser_library/src/checking/asm_instr_check.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ class xattr final : public assembler_instruction
{
public:
xattr(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -74,7 +74,7 @@ class using_instr final : public assembler_instruction
{
public:
using_instr(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -83,7 +83,7 @@ class title final : public assembler_instruction
{
public:
title(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -92,7 +92,7 @@ class rmode final : public assembler_instruction
{
public:
rmode(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -101,7 +101,7 @@ class punch final : public assembler_instruction
{
public:
punch(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -110,7 +110,7 @@ class print final : public assembler_instruction
{
public:
print(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -119,7 +119,7 @@ class stack_instr final : public assembler_instruction
{
public:
stack_instr(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -128,7 +128,7 @@ class org final : public assembler_instruction
{
public:
org(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -138,7 +138,7 @@ class opsyn final : public assembler_instruction
{
public:
opsyn(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -147,7 +147,7 @@ class mnote final : public assembler_instruction
{
public:
mnote(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -156,7 +156,7 @@ class iseq final : public assembler_instruction
{
public:
iseq(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -165,7 +165,7 @@ class ictl final : public assembler_instruction
{
public:
ictl(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -175,7 +175,7 @@ class external final : public assembler_instruction
{
public:
external(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -184,7 +184,7 @@ class exitctl final : public assembler_instruction
{
public:
exitctl(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -194,7 +194,7 @@ class equ final : public assembler_instruction
{
public:
equ(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -204,7 +204,7 @@ class entry final : public assembler_instruction
{
public:
entry(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -213,7 +213,7 @@ class end final : public assembler_instruction
{
public:
end(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -222,7 +222,7 @@ class drop final : public assembler_instruction
{
public:
drop(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector&) const override;
};
Expand All @@ -235,14 +235,14 @@ class data : public assembler_instruction
protected:
template<data_instr_type instr_type>
bool check_data(
const std::vector<const asm_operand*>& to_check, const range& stmt_range, const diagnostic_collector&) const;
std::span<const asm_operand* const> to_check, const range& stmt_range, const diagnostic_collector&) const;
};

class dc final : public data
{
public:
dc(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector&) const override;
};
Expand All @@ -251,7 +251,7 @@ class ds_dxd final : public data
{
public:
ds_dxd(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector&) const override;
};
Expand All @@ -261,7 +261,7 @@ class copy final : public assembler_instruction
{
public:
copy(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -270,7 +270,7 @@ class cnop final : public assembler_instruction
{
public:
cnop(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -288,7 +288,7 @@ class ccw final : public assembler_instruction

public:
ccw(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction, CCW_variant variant);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -299,7 +299,7 @@ class expression_instruction final : public assembler_instruction
{
public:
expression_instruction(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -308,7 +308,7 @@ class cattr final : public assembler_instruction
{
public:
cattr(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -317,7 +317,7 @@ class amode final : public assembler_instruction
{
public:
amode(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -326,7 +326,7 @@ class alias final : public assembler_instruction
{
public:
alias(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -335,7 +335,7 @@ class ainsert final : public assembler_instruction
{
public:
ainsert(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -344,7 +344,7 @@ class acontrol final : public assembler_instruction
{
public:
acontrol(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -353,7 +353,7 @@ class adata final : public assembler_instruction
{
public:
adata(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -363,7 +363,7 @@ class no_operands final : public assembler_instruction
{
public:
no_operands(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand All @@ -373,7 +373,7 @@ class process final : public assembler_instruction
{
public:
process(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction);
bool check(const std::vector<const asm_operand*>& to_check,
bool check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const override;
};
Expand Down
2 changes: 1 addition & 1 deletion parser_library/src/checking/asm_instr_class.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ bool assembler_instruction::is_param_in_vector(
return std::find(options.cbegin(), options.cend(), parameter) != options.cend();
}

bool assembler_instruction::operands_size_corresponding(const std::vector<const asm_operand*>& to_check,
bool assembler_instruction::operands_size_corresponding(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const
{
Expand Down
5 changes: 3 additions & 2 deletions parser_library/src/checking/asm_instr_class.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#ifndef HLASMPLUGIN_PARSERLIBRARY_INSTR_CLASS_H
#define HLASMPLUGIN_PARSERLIBRARY_INSTR_CLASS_H

#include <span>
#include <string>
#include <vector>

Expand Down Expand Up @@ -51,7 +52,7 @@ class assembler_instruction
int max_operands = 0; // maximum number of operands, -1 if upper bound is not defined

public:
virtual bool check(const std::vector<const asm_operand*>&, const range&, const diagnostic_collector&) const = 0;
virtual bool check(std::span<const asm_operand* const>, const range&, const diagnostic_collector&) const = 0;

assembler_instruction(std::vector<label_types> allowed_types,
std::string_view name_of_instruction,
Expand All @@ -66,7 +67,7 @@ class assembler_instruction
protected:
bool is_param_in_vector(std::string_view parameter, const std::vector<std::string_view>& options) const;

bool operands_size_corresponding(const std::vector<const asm_operand*>& to_check,
bool operands_size_corresponding(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const;

Expand Down
4 changes: 1 addition & 3 deletions parser_library/src/checking/checker_helper.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ inline bool is_operand_empty(const asm_operand* to_check_operand)
return dynamic_cast<const empty_operand*>(to_check_operand) != nullptr;
}

inline bool has_one_comma(const std::vector<const asm_operand*>& to_check)
inline bool has_one_comma(std::span<const asm_operand* const> to_check)
{
return to_check.size() == 2 && is_operand_empty(to_check[0]) && is_operand_empty(to_check[1]);
}
Expand All @@ -66,8 +66,6 @@ inline bool has_all_digits(std::string_view str)
return std::all_of(str.begin(), str.end(), [](unsigned char c) { return std::isdigit(c); });
}

inline bool is_positive_number(int to_test) { return to_test > 0; }

// function to convert numbers less than 64000 to hexadecimal
inline std::string dec_to_hexa(int to_convert)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ data::data(const std::vector<label_types>& allowed_types, std::string_view name_
{}

template<data_instr_type instr_type>
bool data::check_data(const std::vector<const asm_operand*>& to_check,
bool data::check_data(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const
{
Expand Down Expand Up @@ -72,7 +72,7 @@ dc::dc(const std::vector<label_types>& allowed_types, std::string_view name_of_i
: data(allowed_types, name_of_instruction)
{}

bool dc::check(const std::vector<const asm_operand*>& to_check,
bool dc::check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const
{
Expand All @@ -82,7 +82,7 @@ bool dc::check(const std::vector<const asm_operand*>& to_check,
ds_dxd::ds_dxd(const std::vector<label_types>& allowed_types, std::string_view name_of_instruction)
: data(allowed_types, name_of_instruction) {};

bool ds_dxd::check(const std::vector<const asm_operand*>& to_check,
bool ds_dxd::check(std::span<const asm_operand* const> to_check,
const range& stmt_range,
const diagnostic_collector& add_diagnostic) const
{
Expand Down
Loading

0 comments on commit 5879157

Please sign in to comment.