Skip to content

Commit c7afa73

Browse files
committed
Removed traits HasSubprograms and HasUserDefinedTypes
1 parent 318b6a1 commit c7afa73

18 files changed

Lines changed: 64 additions & 152 deletions

File tree

rusty_basic/src/instruction_generator/main.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@ use crate::instruction_generator::subprogram_info::{
1212
};
1313

1414
pub fn unwrap_linter_context(linter_context: Context) -> (Names, UserDefinedTypes) {
15-
let (pre_linter_result, linter_names) = linter_context.into();
16-
let user_defined_types = pre_linter_result.into();
17-
(linter_names, user_defined_types)
15+
(linter_context.names, linter_context.user_defined_types)
1816
}
1917

2018
/// Generates instructions for the given program.

rusty_basic/src/interpreter/interpreter_trait.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use std::collections::VecDeque;
22

3-
use rusty_linter::HasUserDefinedTypes;
43
use rusty_variant::Variant;
54

65
use crate::RuntimeErrorPos;
@@ -12,7 +11,7 @@ use crate::interpreter::io::{FileManager, Input, Printer};
1211
use crate::interpreter::registers::{RegisterStack, Registers};
1312
use crate::interpreter::screen::Screen;
1413

15-
pub trait InterpreterTrait: HasUserDefinedTypes {
14+
pub trait InterpreterTrait {
1615
type TStdlib: Stdlib;
1716
type TStdIn: Input;
1817
type TStdOut: Printer;

rusty_basic/src/interpreter/main.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::collections::VecDeque;
22

33
use rusty_common::*;
4-
use rusty_linter::{HasUserDefinedTypes, QBNumberCast};
4+
use rusty_linter::QBNumberCast;
55
use rusty_parser::UserDefinedTypes;
66
use rusty_variant::Variant;
77

@@ -83,14 +83,6 @@ pub struct Interpreter<TStdlib: Stdlib, TStdIn: Input, TStdOut: Printer, TLpt1:
8383
def_seg: Option<usize>,
8484
}
8585

86-
impl<TStdlib: Stdlib, TStdIn: Input, TStdOut: Printer, TLpt1: Printer> HasUserDefinedTypes
87-
for Interpreter<TStdlib, TStdIn, TStdOut, TLpt1>
88-
{
89-
fn user_defined_types(&self) -> &UserDefinedTypes {
90-
&self.user_defined_types
91-
}
92-
}
93-
9486
impl<TStdlib: Stdlib, TStdIn: Input, TStdOut: Printer, TLpt1: Printer> InterpreterTrait
9587
for Interpreter<TStdlib, TStdIn, TStdOut, TLpt1>
9688
{
@@ -504,13 +496,13 @@ impl<TStdlib: Stdlib, TStdIn: Input, TStdOut: Printer, TLpt1: Printer>
504496
.map(|res| res.map_err(RuntimeError::from))
505497
.collect();
506498
let args = r_args.with_err_at(&pos)?;
507-
let v = allocate_array(args, element_type, self.user_defined_types())
499+
let v = allocate_array(args, element_type, &self.user_defined_types)
508500
.with_err_at(&pos)?;
509501
self.registers_mut().set_a(v);
510502
}
511503
Instruction::AllocateUserDefined(user_defined_type_name) => {
512504
let v =
513-
allocate_user_defined_type(user_defined_type_name, self.user_defined_types());
505+
allocate_user_defined_type(user_defined_type_name, &self.user_defined_types);
514506
self.registers_mut().set_a(v);
515507
}
516508
Instruction::VarPathName(root_path) => {

rusty_linter/src/converter/common/context.rs

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ use crate::names::Names;
55
use crate::pre_linter::PreLinterResult;
66

77
pub struct Context {
8-
pre_linter_result: PreLinterResult,
8+
pub functions: SignatureMap,
9+
pub subs: SignatureMap,
10+
pub user_defined_types: UserDefinedTypes,
911
pub resolver: TypeResolverImpl,
10-
// TODO make this private
1112
pub names: Names,
1213
}
1314

@@ -17,25 +18,12 @@ impl TypeResolver for Context {
1718
}
1819
}
1920

20-
impl HasSubprograms for Context {
21-
fn functions(&self) -> &SignatureMap {
22-
self.pre_linter_result.functions()
23-
}
24-
fn subs(&self) -> &SignatureMap {
25-
self.pre_linter_result.subs()
26-
}
27-
}
28-
29-
impl HasUserDefinedTypes for Context {
30-
fn user_defined_types(&self) -> &UserDefinedTypes {
31-
self.pre_linter_result.user_defined_types()
32-
}
33-
}
34-
3521
impl Context {
3622
pub fn new(pre_linter_result: PreLinterResult) -> Self {
3723
Self {
38-
pre_linter_result,
24+
functions: pre_linter_result.functions,
25+
subs: pre_linter_result.subs,
26+
user_defined_types: pre_linter_result.user_defined_types,
3927
resolver: TypeResolverImpl::new(),
4028
names: Names::new(),
4129
}
@@ -48,14 +36,8 @@ impl Context {
4836
/// Gets the function qualifier of the function identified by the given bare name.
4937
/// If no such function exists, returns `None`.
5038
pub fn function_qualifier(&self, bare_name: &BareName) -> Option<TypeQualifier> {
51-
self.functions()
39+
self.functions
5240
.get(bare_name)
5341
.and_then(|function_signature_pos| function_signature_pos.element.qualifier())
5442
}
5543
}
56-
57-
impl From<Context> for (PreLinterResult, Names) {
58-
fn from(value: Context) -> Self {
59-
(value.pre_linter_result, value.names)
60-
}
61-
}

rusty_linter/src/converter/dim_rules/validation.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ use rusty_common::{AtPos, Position, Positioned};
22
use rusty_parser::{AsBareName, DimVar, Parameter, TypedName, VarType};
33

44
use crate::converter::common::Context;
5-
use crate::core::{
6-
ConstLookup, HasSubprograms, HasUserDefinedTypes, IntoTypeQualifier, LintError, LintErrorPos
7-
};
5+
use crate::core::{ConstLookup, IntoTypeQualifier, LintError, LintErrorPos};
86

97
pub fn validate<T>(
108
var_name: &TypedName<T>,
@@ -21,12 +19,12 @@ where
2119
cannot_clash_with_local_constants(var_name, ctx, pos)
2220
}
2321

24-
fn cannot_clash_with_subs<T: VarType, C: HasSubprograms>(
22+
fn cannot_clash_with_subs<T: VarType>(
2523
var_name: &TypedName<T>,
26-
ctx: &C,
24+
ctx: &Context,
2725
pos: Position,
2826
) -> Result<(), LintErrorPos> {
29-
if ctx.subs().contains_key(var_name.as_bare_name()) {
27+
if ctx.subs.contains_key(var_name.as_bare_name()) {
3028
Err(LintError::DuplicateDefinition.at_pos(pos))
3129
} else {
3230
Ok(())
@@ -55,7 +53,7 @@ impl CannotClashWithFunctions for DimVar {
5553
ctx: &Context,
5654
pos: Position,
5755
) -> Result<(), LintErrorPos> {
58-
if ctx.functions().contains_key(self.as_bare_name()) {
56+
if ctx.functions.contains_key(self.as_bare_name()) {
5957
Err(LintError::DuplicateDefinition.at_pos(pos))
6058
} else {
6159
Ok(())
@@ -102,7 +100,7 @@ where
102100
element: type_name,
103101
pos,
104102
}) => {
105-
if ctx.user_defined_types().contains_key(type_name) {
103+
if ctx.user_defined_types.contains_key(type_name) {
106104
Ok(())
107105
} else {
108106
Err(LintError::TypeNotDefined.at(pos))

rusty_linter/src/converter/expr_rules/property.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::converter::common::{Context, ConvertibleIn, ExprContext, ExprContextP
77
use crate::converter::expr_rules::variable::{
88
AssignToFunction, ExistingConst, ExistingVar, VarAsUserDefinedFunctionCall, VarResolve, add_as_new_implicit_var
99
};
10-
use crate::core::{HasUserDefinedTypes, LintError, LintErrorPos};
10+
use crate::core::{LintError, LintErrorPos};
1111

1212
pub fn convert(
1313
ctx: &mut Context,
@@ -145,7 +145,7 @@ fn existing_property_user_defined_type_name(
145145
property_name: Name,
146146
pos: Position,
147147
) -> Result<Expression, LintErrorPos> {
148-
match ctx.user_defined_types().get(user_defined_type_name) {
148+
match ctx.user_defined_types.get(user_defined_type_name) {
149149
Some(user_defined_type) => existing_property_user_defined_type(
150150
resolved_left_side,
151151
user_defined_type,

rusty_linter/src/converter/expr_rules/variable.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use rusty_variant::Variant;
77
use crate::converter::common::{Context, ExprContext, ExprContextPos};
88
use crate::converter::expr_rules::qualify_name::*;
99
use crate::core::{
10-
ConstLookup, HasSubprograms, IntoQualified, IntoTypeQualifier, LintError, LintErrorPos, LintResult, qualifier_of_const_variant
10+
ConstLookup, IntoQualified, IntoTypeQualifier, LintError, LintErrorPos, LintResult, qualifier_of_const_variant
1111
};
1212

1313
pub fn convert(
@@ -47,7 +47,7 @@ pub fn convert(
4747
}
4848

4949
fn validate(ctx: &Context, name: &Name, pos: Position) -> Result<(), LintErrorPos> {
50-
if ctx.subs().contains_key(name.as_bare_name()) {
50+
if ctx.subs.contains_key(name.as_bare_name()) {
5151
return Err(LintError::DuplicateDefinition.at_pos(pos));
5252
}
5353

rusty_linter/src/converter/statement/const_rules.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use rusty_parser::*;
33

44
use crate::converter::common::Context;
55
use crate::core::{
6-
CastVariant, ConstEvaluator, HasSubprograms, LintError, LintErrorPos, LintResult, qualifier_of_const_variant
6+
CastVariant, ConstEvaluator, LintError, LintErrorPos, LintResult, qualifier_of_const_variant
77
};
88

99
pub fn on_const(ctx: &mut Context, c: Constant) -> Result<Statement, LintErrorPos> {
@@ -23,8 +23,8 @@ fn const_cannot_clash_with_existing_names(
2323
if ctx
2424
.names
2525
.contains_any_locally_or_contains_extended_recursively(const_name.as_bare_name())
26-
|| ctx.subs().contains_key(const_name.as_bare_name())
27-
|| ctx.functions().contains_key(const_name.as_bare_name())
26+
|| ctx.subs.contains_key(const_name.as_bare_name())
27+
|| ctx.functions.contains_key(const_name.as_bare_name())
2828
{
2929
Err(LintError::DuplicateDefinition.at(const_name_pos))
3030
} else {

rusty_linter/src/core/traits.rs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,6 @@
1-
use rusty_parser::{
2-
Expression, ExpressionPos, ExpressionType, HasExpressionType, TypeQualifier, UserDefinedTypes
3-
};
1+
use rusty_parser::{Expression, ExpressionPos, ExpressionType, HasExpressionType, TypeQualifier};
42

5-
use crate::core::{ResolvedParamType, SignatureMap};
6-
7-
pub trait HasSubprograms {
8-
fn functions(&self) -> &SignatureMap;
9-
fn subs(&self) -> &SignatureMap;
10-
}
11-
12-
pub trait HasUserDefinedTypes {
13-
fn user_defined_types(&self) -> &UserDefinedTypes;
14-
}
3+
use crate::core::ResolvedParamType;
154

165
/// Checks if a type can be cast into another type.
176
pub trait CanCastTo<T> {

rusty_linter/src/lib.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@ mod tests;
1010
use rusty_parser::Program;
1111

1212
pub use self::converter::Context;
13-
pub use self::core::{
14-
CastVariant, HasUserDefinedTypes, LintError, QBNumberCast, ScopeName, qualifier_of_variant
15-
};
13+
pub use self::core::{CastVariant, LintError, QBNumberCast, ScopeName, qualifier_of_variant};
1614
pub use self::names::Names;
1715
use crate::converter::convert;
1816
use crate::core::LintErrorPos;

0 commit comments

Comments
 (0)