Skip to content

Commit 318b6a1

Browse files
committed
Rename SubprogramName to ScopeName, NameScope to ScopeKind
1 parent a025cde commit 318b6a1

16 files changed

Lines changed: 134 additions & 143 deletions

File tree

rusty_basic/src/instruction_generator/calls.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use rusty_common::{AtPos, Position, Positioned};
2-
use rusty_linter::SubprogramName;
2+
use rusty_linter::ScopeName;
33
use rusty_parser::*;
44

55
use crate::instruction_generator::{AddressOrLabel, Instruction, InstructionGenerator};
@@ -42,18 +42,18 @@ impl InstructionGenerator {
4242
) {
4343
let Positioned { element: name, pos } = function_name;
4444
let qualified_name = name.demand_qualified();
45-
let subprogram_name = SubprogramName::Function(qualified_name.clone());
45+
let scope_name = ScopeName::Function(qualified_name.clone());
4646
// cloning to fight the borrow checker
4747
let function_parameters: Vec<Parameter> = self
4848
.subprogram_info_repository
49-
.get_subprogram_info(&subprogram_name)
49+
.get_subprogram_info(&scope_name)
5050
.params
5151
.clone();
5252
self.generate_push_named_args_instructions(&function_parameters, &args, pos);
53-
self.push_stack(subprogram_name.clone(), pos);
53+
self.push_stack(scope_name.clone(), pos);
5454
let index = self.instructions.len();
5555
self.push(Instruction::PushRet(index + 2), pos);
56-
self.jump_to_subprogram(&subprogram_name, pos);
56+
self.jump_to_subprogram(&scope_name, pos);
5757
// TODO find different way for by ref args
5858
// stash by-ref variables
5959
self.generate_stash_by_ref_args(&args);
@@ -69,18 +69,18 @@ impl InstructionGenerator {
6969

7070
pub fn generate_sub_call_instructions(&mut self, sub_call: SubCall, pos: Position) {
7171
let (name, args) = sub_call.into();
72-
let subprogram_name = SubprogramName::Sub(name);
72+
let scope_name = ScopeName::Sub(name);
7373
// cloning to fight the borrow checker
7474
let sub_impl_parameters: Vec<Parameter> = self
7575
.subprogram_info_repository
76-
.get_subprogram_info(&subprogram_name)
76+
.get_subprogram_info(&scope_name)
7777
.params
7878
.clone();
7979
self.generate_push_named_args_instructions(&sub_impl_parameters, &args, pos);
80-
self.push_stack(subprogram_name.clone(), pos);
80+
self.push_stack(scope_name.clone(), pos);
8181
let index = self.instructions.len();
8282
self.push(Instruction::PushRet(index + 2), pos); // points to "generate_stash_by_ref_args"
83-
self.jump_to_subprogram(&subprogram_name, pos);
83+
self.jump_to_subprogram(&scope_name, pos);
8484
self.generate_stash_by_ref_args(&args);
8585
self.push(Instruction::PopStack, pos);
8686
self.generate_un_stash_by_ref_args(&args);
@@ -148,20 +148,20 @@ impl InstructionGenerator {
148148
}
149149
}
150150

151-
fn push_stack(&mut self, subprogram_name: SubprogramName, pos: Position) {
151+
fn push_stack(&mut self, scope_name: ScopeName, pos: Position) {
152152
if self
153153
.subprogram_info_repository
154-
.get_subprogram_info(&subprogram_name)
154+
.get_subprogram_info(&scope_name)
155155
.is_static
156156
{
157-
self.push(Instruction::PushStaticStack(subprogram_name), pos);
157+
self.push(Instruction::PushStaticStack(scope_name), pos);
158158
} else {
159159
self.push(Instruction::PushStack, pos);
160160
}
161161
}
162162

163-
fn jump_to_subprogram(&mut self, subprogram_name: &SubprogramName, pos: Position) {
164-
let label: BareName = Self::format_subprogram_label(subprogram_name);
163+
fn jump_to_subprogram(&mut self, scope_name: &ScopeName, pos: Position) {
164+
let label: BareName = Self::format_subprogram_label(scope_name);
165165
self.push(Instruction::Jump(AddressOrLabel::Unresolved(label)), pos);
166166
}
167167
}

rusty_basic/src/instruction_generator/dim.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use rusty_common::*;
2-
use rusty_linter::SubprogramName;
2+
use rusty_linter::ScopeName;
33
use rusty_parser::*;
44
use rusty_variant::Variant;
55

@@ -46,7 +46,7 @@ impl InstructionGenerator {
4646

4747
impl InstructionGenerator {
4848
fn is_in_static_subprogram(&self) -> bool {
49-
if self.current_subprogram == SubprogramName::Global {
49+
if self.current_subprogram == ScopeName::Global {
5050
false
5151
} else {
5252
self.subprogram_info_repository

rusty_basic/src/instruction_generator/main.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use rusty_common::{AtPos, CaseInsensitiveString, Position, Positioned};
2-
use rusty_linter::{Context, Names, SubprogramName};
2+
use rusty_linter::{Context, Names, ScopeName};
33
use rusty_parser::{
44
Assignment, BareName, BuiltInFunction, BuiltInSub, DimVar, Expression, ExpressionType, FileHandle, FunctionImplementation, GlobalStatement, HasExpressionType, Name, Parameter, Program, Statement, Statements, SubImplementation, TypeQualifier, UserDefinedTypes
55
};
@@ -181,7 +181,7 @@ pub enum Instruction {
181181
PushUnnamedByRef,
182182

183183
PushStack,
184-
PushStaticStack(SubprogramName),
184+
PushStaticStack(ScopeName),
185185
PopStack,
186186

187187
EnqueueToReturnStack(usize),
@@ -264,7 +264,7 @@ pub struct InstructionGenerator {
264264
pub instructions: Vec<InstructionPos>,
265265
pub statement_addresses: Vec<usize>,
266266
pub subprogram_info_repository: SubprogramInfoRepository,
267-
pub current_subprogram: SubprogramName,
267+
pub current_subprogram: ScopeName,
268268
pub linter_names: Names,
269269
}
270270

@@ -274,7 +274,7 @@ impl InstructionGenerator {
274274
instructions: vec![],
275275
statement_addresses: vec![],
276276
subprogram_info_repository,
277-
current_subprogram: SubprogramName::Global,
277+
current_subprogram: ScopeName::Global,
278278
linter_names,
279279
}
280280
}
@@ -375,7 +375,7 @@ impl InstructionGenerator {
375375
let qualifier = function_name
376376
.qualifier()
377377
.expect("Expected qualified function name");
378-
self.mark_current_subprogram(SubprogramName::Function(function_name), pos);
378+
self.mark_current_subprogram(ScopeName::Function(function_name), pos);
379379
// set default value
380380
self.push(Instruction::AllocateBuiltIn(qualifier), pos);
381381
self.subprogram_body(body, pos);
@@ -397,21 +397,21 @@ impl InstructionGenerator {
397397
body,
398398
..
399399
} = sub_implementation;
400-
self.mark_current_subprogram(SubprogramName::Sub(name), pos);
400+
self.mark_current_subprogram(ScopeName::Sub(name), pos);
401401
self.subprogram_body(body, pos);
402402
}
403403

404-
fn mark_current_subprogram(&mut self, subprogram_name: SubprogramName, pos: Position) {
404+
fn mark_current_subprogram(&mut self, scope_name: ScopeName, pos: Position) {
405405
debug_assert_ne!(
406-
subprogram_name,
407-
SubprogramName::Global,
406+
scope_name,
407+
ScopeName::Global,
408408
"should not mark global scope"
409409
);
410410
self.push(
411-
Instruction::Label(Self::format_subprogram_label(&subprogram_name)),
411+
Instruction::Label(Self::format_subprogram_label(&scope_name)),
412412
pos,
413413
);
414-
self.current_subprogram = subprogram_name;
414+
self.current_subprogram = scope_name;
415415
}
416416

417417
fn subprogram_body(&mut self, block: Statements, pos: Position) {
@@ -474,21 +474,21 @@ impl InstructionGenerator {
474474
self.statement_addresses.push(self.instructions.len());
475475
}
476476

477-
pub fn format_subprogram_label(subprogram_name: &SubprogramName) -> BareName {
478-
let s: String = match subprogram_name {
479-
SubprogramName::Function(function_name) => {
477+
pub fn format_subprogram_label(scope_name: &ScopeName) -> BareName {
478+
let s: String = match scope_name {
479+
ScopeName::Function(function_name) => {
480480
let mut s: String = String::new();
481481
s.push_str(":fun:");
482482
s.push_str(&function_name.to_string());
483483
s
484484
}
485-
SubprogramName::Sub(sub_name) => {
485+
ScopeName::Sub(sub_name) => {
486486
let mut s: String = String::new();
487487
s.push_str(":sub:");
488488
s.push_str(sub_name.as_ref());
489489
s
490490
}
491-
SubprogramName::Global => {
491+
ScopeName::Global => {
492492
panic!("Should not generate label for global scope")
493493
}
494494
};

rusty_basic/src/instruction_generator/subprogram_info.rs

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

33
use rusty_common::Positioned;
4-
use rusty_linter::SubprogramName;
4+
use rusty_linter::ScopeName;
55
use rusty_parser::*;
66

77
/// Holds information about a subprogram that is needed at runtime.
@@ -27,7 +27,7 @@ impl SubprogramInfo {
2727

2828
#[derive(Default)]
2929
pub struct SubprogramInfoCollector {
30-
map: HashMap<SubprogramName, SubprogramInfo>,
30+
map: HashMap<ScopeName, SubprogramInfo>,
3131
}
3232

3333
impl SubprogramInfoCollector {
@@ -51,30 +51,28 @@ impl SubprogramInfoCollector {
5151

5252
fn visit_function_implementation(&mut self, f: &FunctionImplementation) {
5353
let function_name = f.name.element.clone().demand_qualified();
54-
let subprogram_name = SubprogramName::Function(function_name);
55-
self.map.insert(subprogram_name, SubprogramInfo::new(f));
54+
let scope_name = ScopeName::Function(function_name);
55+
self.map.insert(scope_name, SubprogramInfo::new(f));
5656
}
5757

5858
fn visit_sub_implementation(&mut self, s: &SubImplementation) {
5959
let sub_name = s.name.element.clone();
60-
let subprogram_name = SubprogramName::Sub(sub_name);
61-
self.map.insert(subprogram_name, SubprogramInfo::new(s));
60+
let scope_name = ScopeName::Sub(sub_name);
61+
self.map.insert(scope_name, SubprogramInfo::new(s));
6262
}
6363
}
6464

6565
pub struct SubprogramInfoRepository {
66-
map: HashMap<SubprogramName, SubprogramInfo>,
66+
map: HashMap<ScopeName, SubprogramInfo>,
6767
}
6868

6969
impl SubprogramInfoRepository {
70-
pub fn new(map: HashMap<SubprogramName, SubprogramInfo>) -> Self {
70+
pub fn new(map: HashMap<ScopeName, SubprogramInfo>) -> Self {
7171
Self { map }
7272
}
7373

74-
pub fn get_subprogram_info(&self, subprogram_name: &SubprogramName) -> &SubprogramInfo {
75-
self.map
76-
.get(subprogram_name)
77-
.expect("Function/Sub not found")
74+
pub fn get_subprogram_info(&self, scope_name: &ScopeName) -> &SubprogramInfo {
75+
self.map.get(scope_name).expect("Function/Sub not found")
7876
}
7977
}
8078

rusty_basic/src/interpreter/context.rs

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

33
use rusty_common::CaseInsensitiveString;
4-
use rusty_linter::{QBNumberCast, SubprogramName};
4+
use rusty_linter::{QBNumberCast, ScopeName};
55
use rusty_parser::{BareName, BuiltInFunction, TypeQualifier};
66
use rusty_variant::{UserDefinedTypeValue, VArray, Variant, bytes_to_i32, i32_to_bytes};
77

@@ -19,7 +19,7 @@ pub struct Context {
1919
states: Vec<State>,
2020
memory_blocks: Vec<MemoryBlock>,
2121
// static memory blocks (for STATIC function/sub)
22-
static_memory_blocks: HashMap<SubprogramName, usize>,
22+
static_memory_blocks: HashMap<ScopeName, usize>,
2323
}
2424

2525
impl Context {
@@ -49,11 +49,11 @@ impl Context {
4949
self.do_push_new(variables, false);
5050
}
5151

52-
pub fn stop_collecting_arguments_static(&mut self, subprogram_name: SubprogramName) {
52+
pub fn stop_collecting_arguments_static(&mut self, scope_name: ScopeName) {
5353
// current state must be argument collecting state
5454
let arguments = self.do_pop().arguments.expect("Expected argument state");
5555
// ensure memory block for this subprogram
56-
match self.static_memory_blocks.get(&subprogram_name) {
56+
match self.static_memory_blocks.get(&scope_name) {
5757
Some(existing_memory_block_index) => {
5858
let memory_block_index = *existing_memory_block_index;
5959
self.memory_blocks[memory_block_index]
@@ -65,7 +65,7 @@ impl Context {
6565
let variables = Variables::from(arguments);
6666
let memory_block_index = self.do_push_new(variables, true);
6767
self.static_memory_blocks
68-
.insert(subprogram_name, memory_block_index);
68+
.insert(scope_name, memory_block_index);
6969
}
7070
}
7171
}

rusty_basic/src/interpreter/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -397,9 +397,9 @@ impl<TStdlib: Stdlib, TStdIn: Input, TStdOut: Printer, TLpt1: Printer>
397397
self.context.stop_collecting_arguments();
398398
self.stacktrace.insert(0, pos);
399399
}
400-
Instruction::PushStaticStack(subprogram_name) => {
400+
Instruction::PushStaticStack(scope_name) => {
401401
self.context
402-
.stop_collecting_arguments_static(subprogram_name.clone());
402+
.stop_collecting_arguments_static(scope_name.clone());
403403
self.stacktrace.insert(0, pos);
404404
}
405405
Instruction::PopStack => {

rusty_linter/src/built_ins/data.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use rusty_common::{AtPos, Position};
22
use rusty_parser::{Expression, ExpressionPos, Expressions};
33

4-
use crate::core::{LintError, LintErrorPos, NameScope};
4+
use crate::core::{LintError, LintErrorPos, ScopeKind};
55

6-
pub fn lint(args: &Expressions, name_scope: NameScope, pos: Position) -> Result<(), LintErrorPos> {
7-
if name_scope == NameScope::Global {
6+
pub fn lint(args: &Expressions, scope_kind: ScopeKind, pos: Position) -> Result<(), LintErrorPos> {
7+
if scope_kind == ScopeKind::Global {
88
args.iter().try_for_each(require_constant)
99
} else {
1010
Err(LintError::IllegalInSubFunction.at_pos(pos))

rusty_linter/src/built_ins/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,21 +49,21 @@ mod width;
4949
use rusty_common::Position;
5050
use rusty_parser::{BuiltInFunction, BuiltInSub, Expressions};
5151

52-
use crate::core::{LintErrorPos, NameScope};
52+
use crate::core::{LintErrorPos, ScopeKind};
5353

5454
pub fn lint_sub_call(
5555
built_in_sub: &BuiltInSub,
5656
pos: Position,
5757
args: &Expressions,
58-
name_scope: NameScope,
58+
scope_kind: ScopeKind,
5959
) -> Result<(), LintErrorPos> {
6060
match built_in_sub {
6161
BuiltInSub::Beep => beep::lint(args, pos),
6262
BuiltInSub::CallAbsolute => Ok(()),
6363
BuiltInSub::Close => close::lint(args),
6464
BuiltInSub::Cls => cls::lint(args, pos),
6565
BuiltInSub::Color => color::lint(args, pos),
66-
BuiltInSub::Data => data::lint(args, name_scope, pos),
66+
BuiltInSub::Data => data::lint(args, scope_kind, pos),
6767
BuiltInSub::DefSeg => def_seg::lint(args, pos),
6868
BuiltInSub::Environ => environ_sub::lint(args, pos),
6969
BuiltInSub::Field => field::lint(args, pos),

0 commit comments

Comments
 (0)